我很好奇這段代碼是否:
//value is an object, maybe null, maybe not
if (value == null)
item.PassageStimuliTitle = "";
else
item.PassageStimuliTitle = value.ToString().Trim();
相當于這一行:
item.PassageStimuliTitle = (string)(value ?? value.ToString().Trim());
我已經使用 if... else... 很長時間了,但最近在 C# 中遇到了 null 合并運算子。我用它來防止在方法呼叫中傳遞的引數出現空例外錯誤。我認為在上面的示例中使用它是等效的,并將代碼從 4 行壓縮為 1。感謝閱讀。很想聽到反饋。
我希望這兩個示例是等效的,但很好奇我是否缺少某些東西。
uj5u.com熱心網友回復:
不,null-coalescing 運算子運算式寫得不正確。a ?? b表示“b如果a為 null,則評估為,否則評估為a”。因此,您使用 null-coalescing 運算子將始終產生NullReferenceExceptionif valueis null - 您的代碼將嘗試評估value.ToString()何時value為 null。
您的使用??將轉化為類似于以下 if 陳述句的內容,我認為您會同意這是非常荒謬的:
if (value == null) {
item.PassageStimuliTitle = (string)value.ToString().Trim();
} else {
item.PassageStimuliTitle = (string)value;
}
在某些假設下,if 陳述句可以重寫為:
item.PassageStimuliTitle = value?.ToString().Trim() ?? "";
這使用空條件運算子?.。如果value為 null,則整個value?.ToString().Trim()運算式為 null,因此計算 的 RHS ??。否則,.ToString().Trim()被呼叫value。
uj5u.com熱心網友回復:
item.PassageStimuliTitle = value != null ? value.ToString().Trim() : "";
來自@Charles Mager 評論:
item.PassageStimuliTitle = value?.ToString().Trim() ?? ""
是更好更清晰的單線。
uj5u.com熱心網友回復:
你用過??運算子不正確。在這個例子中:
result = left_value ?? right_value;
?? 如果它不為空,則運算子回傳 left_value。如果 left_value 為空,則回傳 right_value。
因此,在您的情況下,如果變數 value 的型別為object,則應為:
item.PassageStimuliTitle = (value ?? "").ToString().Trim();
這是一個成功編譯的代碼小提琴。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/453875.html
上一篇:如何分配NA?
