簡體   English   中英

顯式可為空的類型和 where != null

[英]Explicit nullable types and where != null

在 C# 8.0 中使用新的顯式可空引用類型功能時(如果要設置為空,則所有類型都必須顯式聲明為可空https://docs.microsoft.com/en-us/dotnet/csharp/nullable-references ),你如何處理以下情況:

假設你有一些函數返回一個 IEnumerable 的Something?

var result = aFunction()
         .Where(data => data != null)
         .Select(data => data.Id).ToList();

data.Id 顯示為錯誤(打開錯誤時出現警告):

在此處輸入圖像描述

因為它可以為空,即使它被 Where 檢查為不為空。 在這種情況下,我不想抑制錯誤,有沒有辦法在語法上處理這個錯誤?

編譯器不夠“聰明”,無法檢測到在這種情況下Select()的參數不能為空,因為它只進行靜態代碼分析。 對於這樣的情況,! 表示法是與可為空的引用類型一起引入的。 將感嘆號應用於對象會告訴編譯器“閉嘴”關於可空性警告。

var result = aFunction()
         .Where(data => data != null)
         .Select(data => data!.Id).ToList();

這意味着編譯器不會生成data可能為空的警告。 這在您知道該值不為空但編譯器(例如,由於代碼的復雜性)沒有正確檢測到這一點的所有情況下都很有用。

請注意,這實際上只會刪除警告。 如果該值實際上是 null,那么代碼將像以前一樣運行,因此它會拋出NullReferenceException

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM