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 關注
- 102 瀏覽
添加回答
舉報