提升运算符是通过“提升”非空形式已经存在的运算符来处理可空类型的运算符。因此,例如,如果您这样做:
int? x = 10;int? y = 10;int? z = x + y;
该“
+”运算符被取消。它实际上并不存在,
Nullable<int>但是C#编译器的行为就像它一样,生成代码以执行正确的操作。(在大多数情况下,这是检查两个操作数是否为null的问题;如果是,则结果为null。否则,将两个操作数都包装为它们的不可为null的值,使用normal运算符,然后将结果包装回a可为空的值。不过,在比较中有一些特殊情况。)
有关更多信息,请参见C#规范的
6.4.2(提升的转换运算符)和7.3.7(提升的运算符)。



