【发布时间】:2012-01-13 05:30:56
【问题描述】:
在 C# 中尝试使用三元和空值合并运算符时,我发现可以在表达式的右侧使用赋值,例如这是一个有效的 C# 代码:
int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);
奇怪的是,不仅表达式右侧的赋值被评估为它自己的右侧(这意味着这里的第三行被评估为12,而不是像b = 12 => void这样的东西) ,但这种赋值也有效,因此在一个语句中分配了两个变量。也可以使用此赋值右侧的任何可计算表达式,以及任何可用的变量。
这种行为在我看来很奇怪。我记得在 C++ 中使用 if (a = 2) 而不是 if (a == 2) 比较时遇到了麻烦,它总是被评估为 true,这是从 Basic/Haskell 切换到 C++ 后的常见错误。
它是一个文档化的功能吗?有什么名字吗?
【问题讨论】:
-
注意括号... if(2 == (a =2 )) ....
标签: c# ternary-operator null-coalescing-operator