在C#中,int、bool、DateTime 等值类型的数据不可以为 null 。
值类型的特点:值传递。
string、person 等属于引用类型,其值可以为 null 。
值类型和引用类型的区别是:传递数据时,值类型是值传递(拷贝传递),可以为 null ;引用类型是引用传递,不可以为 null 。
----------------------------------------------------
注意:以上是在C#中。在数据库中,int、bool、DateTime 等是可以为 null 的。
----------------------------------------------------
如果数据库里面存的是 NULL,那么在 C# 中用 row["TelPhone"] 取出来的数据的值是 DBNull.value , 这是ADO.Net 对于 C# 中 int 不可以为 null 、数据库中int可以为 null 的一个权衡。DBNull.Value 不等于 null 。
以下两行代码的效果是一样,但是推荐使用第二行,因为代码量比较少。
if (row["TelPhone"]==DBNull.Value)//在ado.net中判断字段值是否为null的标准方法
if (row.IsNull("TelPhone"))//更简单的判断数据库中字段值为null的方法
在值类型后加?就成为了可空类型。如:
int? i = null; //加了?了,所以这里的i是可控类型
i = 90;
i++;
再比如:
public static int? GetAge()
{
if (DateTime.Now.Second % 2 == 0)
{
return 20;
}
else
{
return null;
}
}