在 C# 中尝试使用三元和 null 合并运算符时,我发现可以在表达式的右侧使用赋值,例如,这是一个有效的 C# 代码:
int? a = null;
int? b = null;
int? c = a ?? (b = 12);
int? d = a == 12 ? a : (b = 15);
奇怪的是,不仅表达式右侧的赋值被评估为它自己的右侧(意味着这里的第三行被评估为12
而不是类似的东西b = 12 => void
),而且这个赋值也有效地工作,所以在一个语句中分配两个变量。还可以使用此赋值右侧的任何可计算表达式以及任何可用变量。
这种行为在我看来很奇怪。if (a = 2)
我记得在 C++ 中使用而不是比较时遇到了麻烦if (a == 2)
,它总是被评估为true
,这是从 Basic/Haskell 切换到 C++ 后的常见错误。
它是记录在案的功能吗?它有什么名字吗?