什么时候在C#.net中需要使用“可空”类型?能否举例解释一下。
可空类型(何时使用可空类型)是可以取null值的值类型。它们的默认值是null
,意味着你没有给它赋值。例如int、float、double、DateTime等都是值类型,它们有这些默认值。
int x = 0;
DateTime d = DateTime.MinValue;
float y = 0;
对于可空类型的替代方案,以上任何一种的默认值均为null。
int? x = null; //no value
DateTime? d = null; //no value
string s = null;
object o = null;
当从数据库中获取到值时,如果这些值是NULL
,那么可空类型非常有用。例如,假设您的数据库表中有一个可能为NULL
的整数值,如果C#变量不可为空,则只能用0
来表示。
还有一个例子,假设有一个EndDate
列,在实际时间之前其值无法确定。虽然在数据库中可以将其设置为NULL
,但您需要使用可空类型来在C#中存储它。
DateTime StartDate = DateTime.Today;
DateTime EndDate? = null; //we don't know yet
int id=null;//error
Nullable type
可以让你实现这一点。
int,double,char..
等值类型无法表示为NULL
值。null
,必须使用nullable type
。?
。int? id=null;
这被翻译成:Nullable<int> id=new Nullable<int>();
可空类型的默认值为null
。来自: http://msdn.microsoft.com/zh-cn/library/1t3y8s4s(v=vs.80).aspx 可空类型是 System.Nullable 结构体的实例。可空类型可以表示其基础值类型的正常值范围,还包括一个额外的 null 值。例如,Nullable<Int32>(发音为“可空的 Int32”)可以被分配从 -2147483648 到 2147483647 的任何值,或者可以被分配为 null 值。Nullable<bool> 可以被分配为 true 或 false 值,也可以为 null。
class NullableExample
{
static void Main()
{
int? num = null;
if (num.HasValue == true)
{
System.Console.WriteLine("num = " + num.Value);
}
else
{
System.Console.WriteLine("num = Null");
}
//y is set to zero
int y = num.GetValueOrDefault();
// num.Value throws an InvalidOperationException if num.HasValue is false
try
{
y = num.Value;
}
catch (System.InvalidOperationException e)
{
System.Console.WriteLine(e.Message);
}
}
}
可空类型是C#2.0中引入的新概念,允许用户将null值分配给C#语言的基本数据类型。重要的是要注意可空类型是结构类型。
Nullable<T>
是一种包装类型,允许值类型具有空值(或“可选”)语义。它不仅适用于基元类型,并且将null
分配给可空类型实际上是语法糖。在引用意义上,null
的Nullable<T>
并不真正为空。 - James Michael Hare