出于某种原因,我的老板喜欢创建自定义类型来表示通用列表(即使在大多数情况下,他的自定义类型没有成员!我认为他只是懒惰,不喜欢输入列表或其他内容,但对我来说这是蹩脚的,并且让我对下面的问题感到非常头痛。
情况要点:
public class ItemnList : List<Item>
{
public Personalization FindById(int id)
{
...blahblah blah, this is really an extension method that should be elsewhere
}
}
因此,当我使用标准列表时(也许我讨厌他的自定义类,并且喜欢使用普通的 .NET 类型,就像它们应该使用的那样),或者也许我使用如下所示的 LINQ 表达式,我总是会遇到转换问题即使自定义类型继承自该列表
private ItemList someMethod(ItemList itemList)
{
...
itemList = (ItemList)items.Where(x => x.ItemType != ItemType.Car && x.ItemType != ItemType.Truck).ToList();
return itemList;
....
}
As 格泽尼奥指出 https://stackoverflow.com/a/1882597/282110,您不能使用 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>();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)