[英]Output (Nullable Types in C#)
在C#中(可空类型)
int a = 10;
int? b = 20;
int? c = null;
System.Console.WriteLine( a+c??b );
输出为:20
如果(c ?? b + a),则输出为30
我不明白为什么..
这只是一个优先事项。
这个:
System.Console.WriteLine(a + c ?? b);
等效于:
System.Console.WriteLine((a + c) ?? b);
a + c
为空(因为c
为空),因此打印20( b
的值)
鉴于此:
System.Console.WriteLine(c ?? b + a);
等效于:
System.Console.WriteLine(c ?? (b + a));
c
为空,因此评估RHS( b + a
),即30。
c ?? b + a被评估为
c?? (b+a)
或稍微扩大
c == null ? b + a : c
或者如果我们用实际值代替
null == null ? 20 + 10 : null)
而+ c ?? b被评估为
(a+c)??b
或者如果我们稍微扩展
(a + c) == null ? b : c+a
或者如果我们用实际值代替
(10 + null) == null ? 20 : 10 + null
可以再次缩短为
null == null ? 20 : null
如果至少一个操作数为null,则可为null的类型的加法运算符始终返回null
当你写:
System.Console.WriteLine( a+c??b );
它将有效评估为:
int? temp = a + c;
System.Console.WriteLine(temp ?? b);
上面的“ temp”为空,因此得到b
的结果。
在此处检查: ECMA-334:14.2.1运算符优先级和关联性
Null合并运算符(??)的优先顺序比'+'的优先顺序小得多。 因此,始终先评估“ +”。
就你而言
int a = 10;
int? b = 20;
int? c = null;
a + c ?? b计算为(a + c)?? b =(10 + null)?? 20 = null ?? 20 = 20
c ?? b + a计算为c ??(b + a)= null ??(10 + 20)=(10 + 20)= 30
由于c为空,则答案为b! 那是你的两倍? 做。
??
运算符用于检查null。 它返回有问题的值,如果为空则返回。
c ?? b
c ?? b
表示“ c,除非c为null,在这种情况下为b”。
c ?? b + a
c ?? b + a
检查c,并发现它为空,并改用b(20)。 然后将(10)加30。
a + c ?? b
a + c ?? b
似乎正在应用??
加到a + c
而不仅仅是加到c上,导致整个事物被b(20)代替。
*在这种情况下不确定操作顺序,由于c为空, 可能正在使用(b + a)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.