[英]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.