C# 6.0 問號點運算符的奧秘
C# 6.0 中引入的 ?. 運算符引起了開發人員的興趣。讓我們來揭開它神秘的面紗:
它的作用:
?. 運算符被稱為“空條件”運算符。它允許您安全地訪問可能為空的對象的屬性或調用其方法,而不會導致惱人的 NullReferenceException 異常。
工作原理:
?. 運算符評估第一個操作數。如果它是 null,則表達式停止並返回 null。但是,如果第一個操作數不為 null,則它將繼續評估第二個操作數,作為第一個操作數的成員訪問。
示例:
考慮以下代碼片段:
<code class="language-c#">public class A { public string PropertyOfA { get; set; } } ... var a = new A(); var foo = "bar"; if(a?.PropertyOfA != foo) { //somecode }</code>
在這裡,如果 a 為 null,a?.PropertyOfA 將優雅地返回 null,而不是拋出異常。這允許您使用字符串的 == 運算符將其與 foo 進行比較,並在沒有任何問題的情況下繼續執行 if 語句。
等效代碼:
?. 運算符可以被認為是以下代碼的簡寫版本:
<code class="language-c#">string bar = (a == null ? null : a.PropertyOfA); if (bar != foo) { ... }</code>
類型注意事項:
值得注意的是,?. 運算符還可以改變表達式的類型。例如,FileInfo.Length 是 long 類型的屬性。但是,使用 ?. 將導致 long? 類型的表達式:
<code class="language-c#">FileInfo fi = ...; // fi 可能为 null long? length = fi?.Length; // 如果 fi 为 null,length 将为 null</code>
以上是C#6.0的無效操作員(?)背後的奧秘是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!