价值是什么?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( != 真是什么意思??
??
是空合并运算符。
展开,这意味着:
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,则返回左侧操作数;否则,它将返回正确的操作数。
并不意味着什么,它是 _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;
}
}
}
这要长得多,但可读性更强!