价值是什么?0 表示 C# 代码

本文关键字:表示 代码 是什么 | 更新日期: 2023-09-27 18:21:30

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

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

价值是什么?0 表示 C# 代码

??是空合并运算符。

展开,这意味着:

value == null ? 0 : value;

下面是不带运算符的 set 访问器的详细版本。

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 上有数十个讨论。

它是空合并运算符

正如其他答案所指出的,它评估第一个操作数。如果这不是 null,那么这就是总体值。否则,它将评估第二个操作数,这就是总体值。但重要的是,两个操作数都不会多次计算,并且仅当第一个操作数为 null 时,才会计算第二个操作数。由于类型之间的潜在转换,事情稍微复杂一些,但这是一般原则。

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

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

int defaultValue = 10;
int? potentialValue = GetValueFromSomewhere();
int valueOrDefault = potentialValue ?? defaultValue;

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

_a.B.Equals(value ?? 0) 

可以改写为

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

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

a ?? b基本上是

(a != null) ? a : b

这意味着"给我a,但如果a为空,请给我默认值 b "。
此外,? :表达式是以下表达式的简写:

if (a != null)
   a
else
   b

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

可以看到

a = b??c扩展到:

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

或者,在另一种速记符号中[使用三元运算符]:

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

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

(value ?? 0( != true

并不意味着什么,它是 _a.B.Equals(value ?? 0( != true 这意味着什么。
那东西是 !(_a.B == (值 ?? 0((,这与"如果值不为空,则 _a.B 等于值或如果 _a.B 为空则等于 0"相反。

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

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

这要长得多,但可读性更强!