簡體   English   中英

轉換 IEnumerable<t?> 到 IEnumerable<t></t></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# 中做到這一點,這樣,在編譯時,我可以保證列表的類型不可為空,並且它不包含空值?

dotnetfiddle

理想情況下,我希望以通用方式執行此操作(但我有一個單獨的問題)。

我設法找到了這個問題,它提供了一種通過將空值轉換為類型的值來轉換值的好方法。

有沒有辦法做到這一點?

您可以使用.Value

IEnumerable<int> xs3 = xs.Where(x => x != null).Select(x => x.Value);

暫無
暫無

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

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