簡體   English   中英

無法將'System.Collections.Generic.List`1 [Item]'類型的對象強制轉換為'ItemList'類型

[英]Unable to cast object of type 'System.Collections.Generic.List`1[Item]' to type 'ItemList'

出於某種原因,我的老板喜歡創建自定義類型來表示通用列表(即使在他的自定義類型沒有成員的大多數情況下!我認為他只是懶惰而且不喜歡鍵入List或者其他東西,但對我來說這是跛腳並且在下面的問題上讓我感到很頭疼。

以防萬一:

public class ItemnList : List<Item>
{
    public Personalization FindById(int id)
    {
        ...blahblah blah, this is really an extension method that should be elsewhere
    }

}

因此,當我使用標准List(mabye我討厭他的自定義類並喜歡使用普通的.NET類型,就像他們應該使用的那樣),或者我可能正在使用如下所示的LINQ表達式,我總是遇到投射問題即使自定義類型繼承自該List

private ItemList someMethod(ItemList itemList)
{
    ...
    itemList = (ItemList)items.Where(x => x.ItemType != ItemType.Car && x.ItemType != ItemType.Truck).ToList();

    return itemList;
    ....
}

正如Grzenio指出的那樣 ,你不能使用ToList()和強制轉換 ,但是你可以創建自己的擴展方法來從序列中創建派生類型的實例:

public static TDerived CreateFromEnumerable<TDerived, T>(this IEnumerable<T> seq) where TDerived : List<T>, new()
        {
            TDerived outList = new TDerived();
            outList.AddRange(seq);
            return outList;
        }

所以對於你的例子你會這樣做:

ItemList outList = itemList
    .Where(x => x.ItemType != ItemType.Car && x.ItemType != ItemType.Truck)
    .CreateFromEnumerable<ItemList, Item>();

不幸的是,ToList()將返回一個普通列表,而不是ItemnList,因此你無法強制轉換它。 我真的沒有看到合理的解決方法,將List封裝在ItemnList中可能會更好,而不是從它派生。

暫無
暫無

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

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