有什么价值? 0表示c#代码

时间:2012-01-27 07:15:46

标签: c#

get { return _a.B; }

set
{
   if (( _a.B.Equals(value ?? 0) != true ))
   {
      _a.B= value ?? 0;
   }
}

我已经用c#编写了上面的代码。在上面的代码中(value ?? 0)!= true是什么意思??

9 个答案:

答案 0 :(得分:3)

??null-coalescing运营商。

扩展,意思是:

value == null ? 0 : value;

以下是没有运算符的set accessor的详细版本。

set
{
   // assumes that this is a nullable type (based on usage)
   int? coalescedValue = value;

   if( coalescedValue == null )
   {
       coalescedValue = 0;
   }

   if( ( _a.B.Equals( coalescedValue ) != true ) )
   {
      _a.B = coalescedValue;
   }
}

SO上有dozens of discussions关于此运算符的使用情况。

答案 1 :(得分:2)

这是null-coalescing operator

正如其他答案所指出的那样,它会评估第一个操作数。如果那不是null,那么这就是整体价值。否则,它评估第二个操作数, 整体值。但重要的是,两个操作数都不会被多次计算,只有第一个操作数为空时才会计算第二个操作数。由于类型之间可能存在转换,事情稍微复杂一些,但这是一般原则。

(至少,这就是理论。当前MS实现中存在一个错误,这意味着第一个操作数可能会被多次评估 - 但它不应该被评估。)

另一个有用的要点是第一个操作数类型必须可以为空,但第二个操作数类型不必是 - 并且在第一个操作数类型为{{的常见情况下1}}和第二个操作数是Nullable<T>类型,整个表达式的类型是T。例如:

T

答案 2 :(得分:0)

如果value为null,则返回??之后的值,否则返回它自己的值。 http://msdn.microsoft.com/en-us/library/ms173224.aspx

答案 3 :(得分:0)

_a.B.Equals(value ?? 0) 

可以改写为

_a.B.Equals(value == null ? 0 : value) 

这意味着如果_a.B等于value,如果value不为null,否则等于零

答案 4 :(得分:0)

a ?? b基本上是

的简写
(a != null) ? a : b

表示“给我a,但如果a为空,请给我默认值b”。
此外,? :表达式是:

的简写
if (a != null)
   a
else
   b

答案 5 :(得分:0)

这意味着如果返回value == null 0,则返回值

答案 6 :(得分:0)

可以看到

a = b??c扩展为:

if(b != Null) {
    a = b;
} else {
    a = c;
}

或者,用另一种简写符号[使用三元运算符]:

a = (b!=Null)?b:c;

答案 7 :(得分:0)

?? operator被称为null-coalescing运算符,用于为可空值类型或引用类型定义默认值。如果操作数不为null,则返回左侧操作数;否则它返回正确的操作数。

答案 8 :(得分:0)

(value ?? 0)!= true并不意味着什么,它是_a.B.Equals(值?? 0)!= true表示意思。
那个东西是!(_ a.B ==(value ?? 0)),这是“如果_a.B为空,则_a.B等于值,如果value不为null或等于0”。< / p>

您可以通过以下方式重写代码段:

set
{
    if (value == null)
    {
        if (_a.B != 0)
        {
            _a.B = 0;
        }
    }
    else
    {
        if (_a.B != value)
        {
            _a.B = value;
        }
    }
}

这个更长,但更具可读性!