![](/img/trans.png)
[英]How to convert an IEnumerable<IEnumerable<T>> to a IEnumerable<T>
[英]Convert IEnumerable<T?> to IEnumerable<T>
我希望能夠獲取可空類型 T? 的列表,並刪除任何 null 值,留下 T 類型。例如:
List<int?> xs = new List<int?>() {1, 2, 3};
// this method works
IEnumerable<int> xs2 = xs.Select(x => x ?? 0);
// this method does not
IEnumerable<int> xs3 = xs.Where(x => x != null);
我很欣賞 C# 無法推斷列表的類型,以便能夠判斷列表中沒有空值。 但我正在努力尋找最好的方法來做到這一點,而不僅僅是做一個明確的演員,如:
IEnumerable<int> xs3 = xs.Where(x => x != null).Select(x => (int)x);
我遇到的問題是,如果沒有Where
語句,那么代碼仍然會通過類型檢查,但會出現運行時錯誤。 有沒有辦法在 C# 中做到這一點,這樣,在編譯時,我可以保證列表的類型不可為空,並且它不包含空值?
理想情況下,我希望以通用方式執行此操作(但我有一個單獨的問題)。
我設法找到了這個問題,它提供了一種通過將空值轉換為類型的值來轉換值的好方法。
有沒有辦法做到這一點?
您可以使用.Value
:
IEnumerable<int> xs3 = xs.Where(x => x != null).Select(x => x.Value);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.