首先你要知道,结构作为值类型,是不能赋值为null的,而int32是个结构..有时(特别是与数据库交互时)需要赋值为null,就在结构后面加个?标识符,表示可以接受null空类型
如果不赋予初值,C#的变量是不允许直接使用的。 但有的时候,让值的类型为空是非常有用的, 比如三态bool,其中一个状态便是未给定值。 泛型使用System.NullAble<T>提供了类型值为空的一种方式。 System.NullAble<T> nullAbleInt; 因为太常用,C#特意给了一个语法快捷 int? nullAbleInt; 简单的例子: int? nVal1 = new int?(); int? nVal2 = null; int? nVal3 = 3; Console.WriteLine(nVal1); // 输出null Console.WriteLine(nVal2); // 输出null Console.WriteLine(nVal3); // 输出3 原则:null与任何数数学运算结果为null,null bool 操作任何值结果为 null。 为了减少可空类型的代码量,遇到null的时候 C#提供了??操作符来获取如果为空的默认值。 static void Main(string[] args) { int? nVal1 = null; int? nVal2 = 5; // nVal1为空,相乘后还是null,输出0作为默认值 Console.WriteLine(2 * nVal1 ?? 0); // nVal2非空,取计算值输出,输出10 Console.WriteLine(2 * nVal2 ?? 0); }