2 回答

TA贡献1797条经验 获得超4个赞
我有时会使用这样的表达方式:-
string a = null;
if((a = GetValue()) != null){
DoSomething();
}
分配除 null 以外的其他值并检查它是否为布尔表达式是一种很好的语法。尽管请记住,最外面的括号总是要求一个布尔表达式。

TA贡献1886条经验 获得超2个赞
但我想知道是否有任何情况下 if 采用除 bool 以外的任何值。
不,不,有点像
if-else(C# 参考)
if 语句根据布尔表达式的值标识要运行的语句
以下仅适用,因为结果是布尔值
if (a=Char.IsLower(c))
它相当于
a=Char.IsLower(c);
if (a)
和下面一样a,b变成结果Char.IsLower(c)
bool a = false;
bool b = false;
a = b = Char.IsLower(c)
...结果必须等于 bool(故事结束)
警告(如果你想这样称呼它)是可以为空的和Lifted Operators。提升的运算符是通过“提升”已经存在于不可空形式上的运算符来处理可空类型的运算符,但它仍然必须等同于布尔表达式。
?int bob = null
if(bob > 3) { ... }
其他资源
来自C# 规范
12.4.8 提升运营商
对于等式运算符
== !=
如果操作数类型都是不可为空的值类型并且结果类型是 bool,则存在运算符的提升形式。提升的形式是通过添加单个 ? 每个操作数类型的修饰符。提升的运算符认为两个空值相等,一个空值不等于任何非空值。如果两个操作数都不为空,则提升的运算符解开操作数并应用底层运算符来产生 bool 结果。
对于关系运算符
< > <= >=
如果操作数类型都是不可为空的值类型并且结果类型是 bool,则存在运算符的提升形式。提升的形式是通过添加单个 ? 每个操作数类型的修饰符。如果一个或两个操作数为空,则提升的运算符产生值 false。否则,提升的运算符会展开操作数并应用底层运算符来生成 bool 结果。
- 2 回答
- 0 关注
- 82 浏览
添加回答
举报