[英]Unable to cast object of type 'System.Collections.Generic.List`1
[英]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.