什么是价值??0表示在c#代码中
我已经用c#对上述代码进行了编码。在上面的代码中,什么是(值??0)!=真正的平均值是运算符什么是价值??0表示在c#代码中,c#,C#,我已经用c#对上述代码进行了编码。在上面的代码中,什么是(值??0)!=真正的平均值是运算符 value == null ? 0 : value; 扩大,意味着: get { return _a.B; } set { if (( _a.B.Equals(value ?? 0) != true )) { _a.B= value ?? 0; } } 这是不带运算符的set访问器的详细版本 value == null ? 0 : value; 关于此运算符的用法,
value == null ? 0 : value;
扩大,意味着:
get { return _a.B; }
set
{
if (( _a.B.Equals(value ?? 0) != true ))
{
_a.B= value ?? 0;
}
}
这是不带运算符的set访问器的详细版本
value == null ? 0 : value;
关于此运算符的用法,有许多限制。??
是运算符
value == null ? 0 : value;
扩大,意味着:
get { return _a.B; }
set
{
if (( _a.B.Equals(value ?? 0) != true ))
{
_a.B= value ?? 0;
}
}
这是不带运算符的set访问器的详细版本
value == null ? 0 : value;
关于此运算符的用法,有很多限制。如果值为null,则返回在???之后的值,否则返回其自身的值。
value == null ? 0 : value;
如果值为空,则返回???后面的值,否则返回其自身的值。 可以重写为
_a.B.Equals(value ?? 0)
这意味着,若a.B等于value,若value不为null,则等于零
可以重写为
_a.B.Equals(value ?? 0)
这意味着如果a.B等于value,如果value不为null,则等于零??b基本上是
_a.B.Equals(value == null ? 0 : value)
这意味着“给我a
,但如果a
为空,则给我b
的默认值。”
进一步的?:代码>表达式是以下内容的简写:
(a != null) ? a : b
a??b
基本上是
_a.B.Equals(value == null ? 0 : value)
这意味着“给我a
,但如果a
为空,则给我b
的默认值。”
进一步的?:代码>表达式是以下内容的简写:
(a != null) ? a : b
这意味着如果返回值==null 0,则返回值这意味着如果返回值==null 0,则返回值a=b??c
可以扩展到:
if (a != null)
a
else
b
或者,用另一种简写法[使用三元运算符]:
if(b != Null) {
a = b;
} else {
a = c;
}
a=b??c
可以扩展到:
if (a != null)
a
else
b
或者,用另一种简写法[使用三元运算符]:
if(b != Null) {
a = b;
} else {
a = c;
}
这个??运算符称为空合并运算符,用于为可空值类型或引用类型定义默认值。如果操作数不为空,则返回左侧操作数;否则它将返回正确的操作数。??运算符称为空合并运算符,用于为可空值类型或引用类型定义默认值。如果操作数不为空,则返回左侧操作数;否则它将返回正确的操作数。它是正确的操作数
正如其他答案所指出的,它计算第一个操作数。如果该值不为null,则为总值。否则,它计算第二个操作数,这是总值。但重要的是,这两个操作数的求值次数都不超过一次,并且只有在第一个操作数为null时才对第二个操作数求值。由于类型之间的潜在转换,情况稍微复杂一些,但这是一般原则
(至少,这是理论。当前MS实现中存在一个缺陷,这意味着第一个操作数可能会被计算多次,但不应该如此。)
另一个需要注意的有用点是,第一个操作数类型必须是可空的,但第二个操作数类型不必是可空的。在常见情况下,第一个操作数的类型是可空的,第二个操作数的类型是可空的,而第二个操作数的类型是类型t
,整个表达式的类型是t
。例如:
a = (b!=Null)?b:c;
这是最重要的
正如其他答案所指出的,它计算第一个操作数。如果该值不为null,则为总值。否则,它计算第二个操作数,这是总值。但重要的是,这两个操作数的求值次数都不超过一次,并且只有在第一个操作数为null时才对第二个操作数求值。由于类型之间的潜在转换,情况稍微复杂一些,但这是一般原则
(至少,这是理论。当前MS实现中存在一个缺陷,这意味着第一个操作数可能会被计算多次,但不应该如此。)
另一个需要注意的有用点是,第一个操作数类型必须是可空的,但第二个操作数类型不必是可空的。在常见情况下,第一个操作数的类型是可空的,第二个操作数的类型是可空的,而第二个操作数的类型是类型t
,整个表达式的类型是t
。例如:
a = (b!=Null)?b:c;
(值??0)!=true没有任何意义,它是_a.B.等于(值??0)!=没错,这意味着什么。
那是什么东西!(_a.B==(值??0)),这与“如果值不为null,则为_a.B等于值;如果_a.B为null,则为等于0”相反
您可以通过以下方式重写代码段:
int defaultValue = 10;
int? potentialValue = GetValueFromSomewhere();
int valueOrDefault = potentialValue ?? defaultValue;
这要长得多,但可读性要高得多!(值0)!=true并不意味着什么,它是_a.B等于(值0)!=true意味着什么。
这就是!(_a.B==(值??0)),这是“如果值不为null,则是_a.B等于值,如果值为null,则是_a.B等于0”的对立面
您可以通过以下方式重写代码段:
int defaultValue = 10;
int? potentialValue = GetValueFromSomewhere();
int valueOrDefault = potentialValue ?? defaultValue;
这要长得多,但可读性强得多 您为什么使用不懂的运算符编写代码的精确副本?您为什么使用不懂的运算符编写代码的精确副本的可能副本?您为什么使用不懂的运算符编写代码的可能副本。。。但重要的是,a
只被评估一次。。。。但重要的是,a
只能计算一次。