以我拥有的示例为例:
public class A
{
public string ID { get; set; }
}
public class B : A
{
public string name { get; set; }
}
是否可以通过lambda将A类列表返回B类,而无需使用任何类扩展名?我很好奇当前的框架是否能够做到这一点。
public void Something()
{
List<A> objA = new List<A>();
List<B> objB = new List<B>();
objB = objA.Where(x => x.ID == "").ToList();
}
假定B类是A类的实现。为什么此代码将返回错误
无法将'System.Collection.Generic.List A>隐式转换为 System.Collection.Generic.List B>
答案 0 :(得分:1)
objA可能包含类A或B的对象,因此您不能直接将查询结果分配给objB。
如果您确定每个通过Where
的对象实际上都是B类的对象,则可以编写:
objB = objA.Where(x => x.ID == "").Cast<B>().ToList();
这会将所有对象都投射到B的位置,因此您得到IEnumerable<B>
,并通过List<B>
调用变成了ToList
。
如果类型A的对象也可以通过Where,则使用OfType代替Cast仅使用类型B的那些对象。
objB = objA.Where(x => x.ID == "").OfType<B>().ToList();