C#返回Lambda中的类实现

时间:2019-05-05 05:57:16

标签: c# linq lambda

以我拥有的示例为例:

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>

1 个答案:

答案 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();