我只在啟用可為空參考型別后收到警告,但具體示例實際上是舊Nullable<T>型別:
var nullableItems = new List<int?>();
var actualNonNullValues = nullableItems.Where(x => x.HasValue)
.Select(x => x.Value)
.ToList();
所以我整理了所有的空值,只想要實際的非空專案。但是,該部分.Select(x => x.Value)會給我一個編譯器警告,關于x此處可能為空。從邏輯上講不是,但對于編譯器來說,型別還沒有改變,它仍然是一個int?.
我知道我可以通過對 應用 an!來告訴編譯器閉嘴x,但似乎我作弊了。在我使用的其他語言中,不得不回到這一點被認為是不好的做法,意味著你做錯了什么。
我的其他選擇是什么?我可以做得比只使用!這里更好嗎?
uj5u.com熱心網友回復:
在Select(x => x.Value), xis of type 中int?,編譯器會立即警告您呼叫.Value該型別可能會拋出。
這沒有多大意義,因為您已經在.Where(x => x.HasValue). 不幸的是,C# 編譯器目前不理解Select將只接收非空值,因為它的背景關系不理解Where方法語意。
你唯一的選擇就是!“我知道我在這里做什么”。
有一個語言問題跟蹤這個:https : //github.com/dotnet/csharplang/issues/3951
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/371007.html
上一篇:找不到AddMasstransitHostedService
下一篇:SSIS腳本任務拋出死鎖錯誤
