十进制可空和十进制值的总和

时间:2015-02-04 08:30:47

标签: c#

为什么在此代码执行变量'a'包含 null 而不是10?

之后
decimal? a = null;
a += 10;

5 个答案:

答案 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 (C# Reference)

  

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表达式的结果始终为“空”'类型'十进制?