簡體   English   中英

動態 IEnumerable

[英]Dynamic IEnumerable

有沒有辦法動態獲取可以分配給IEnumerable<T>

我有一個屬性很少的國家類和一個包含一些值的List<string>類。
我編寫的以下代碼專門檢查國家類,並將 else 作為字符串。

var countryInfo = parentList as IEnumerable<Countries>;

var selectItems = countryInfo == null
    ? ((IEnumerable<string>)parentList).Select(item => new SelectItem() { Value = item, Text = item.ToString() })
    : countries.Select(country => new SelectItem() { Value = country.Name, Text = country.Name });

我正在尋找一種解決方案,它可以動態獲取我可以綁定到IEnumerable<>的類型,這將讓我避免三元檢查。

我會考慮使用 switch 表達式:

var selectItems = parentList switch{
    IEnumerable<Countries> c => c.Select(item => new SelectItem() { Value = item, Text = item.ToString() }),
    IEnumerable<string> s => s.Select(country => new SelectItem() { Value = country.Name, Text = country.Name }),
_ => throw new Exception(...)
}

這至少比三級表達式更容易閱讀。

更好的解決方案是首先不要陷入困境。 這里的主要問題是parentList可以是多種不同的類型,而大概代表相同的概念事物。 這應該通過在需要時轉換為一種特定類型或隱藏接口背后的類型之間的差異來避免。 在大多數情況下,我可能更喜歡前者。

暫無
暫無

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

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