为什么在此代码执行变量'a'包含 null 而不是10?
之后decimal? a = null;
a += 10;
答案 0 :(得分:5)
您无法向null
添加值。无论您添加什么值,null
都将为null。另一方面,如果您已将非空值分配给a
,则会将10添加到a
。
取自MSDN
预定义的一元和二元运算符以及任何用户定义的 存在于值类型的运算符也可以由nullable使用 类型。如果操作数为null,则这些运算符产生空值; 否则,运算符使用包含的值来计算 结果。例如:
int? a = 10;
int? b = null;
a++; // Increment by 1, now a is 11.
a = a * 10; // Multiply by 10, now a is 110.
a = a + b; // Add b, now a is null.
答案 1 :(得分:2)
因为null表示空引用。含义a
不指向对象。所以没有对象可以添加10来。
如果a
为0,则a
将指向一个对象,0 + 10将等于10,就像您期望的那样
null关键字是一个表示空引用的文字,一个 这并不是指任何对象。 null是默认值 引用类型变量。普通值类型不能为空。 但是,C#2.0引入了可空值类型
答案 2 :(得分:2)
我不知道c#,但在SQL中,Null + value = Null,所以这对我来说似乎很正常。在VBA中,如果myNum为Null,我使用Nz(myNum,0)返回0,否则返回myNum
答案 3 :(得分:2)
空表示“未知”,“没有意义”,“不适用”等等你的情况
// "Unknown" + 10 = ?
decimal? a = null;
a += 10; // Still "Unknown"...
与数据库的相同的事物,例如Oracle示例:
select null + 10 -- null
from Dual
答案 4 :(得分:1)
小数?不是小数。它是一个可以为空的结构。 当您使用+运算符时,您的可以为空的<>转换为十进制。该操作的结果存储在新的可为空的<>中。 但是,如果一个值为null(HasValue == false,那里什么都没有!)那么你根本无法执行二进制操作。
你应该收到警告: 警告111表达式的结果始终为“空”'类型'十进制?