[英]Using LINQ to get objects of type from a list
请参见下面的代码:
public interface IVehicle {
}
public class Car : IVehicle {
}
public class Lorry : IVehicle {
}
和下面的客户端代码:
var Vehicles = new List<IVehicle>();
Vehicles.Add(new Car());
Vehicles.Add(new Lorry());
var Vehicles2 = new List<IVehicle>();
Vehicles2.Add(Vehicles.OfType<Car>() as IVehicle);
最后一行运行后,会将空值添加到列表中。 如何确保将Car添加到列表中。
我从这里得到了一个主意: 按对象类型选择LINQ 。
您的List<IVehicle>
可能有很多Car
项目,因此您必须使用AddRange
Vehicles2.AddRange(Vehicles.OfType<Car>());
LINQ的办法Where
Vehicles2.AddRange(Vehicles.Where(x => x.GetType() == typeof(Car)));
@fubo,可以保证只有一个
如果总有一个,而您只想用“ Add
将其Add
,则还可以使用Single()
选择该Car
注意:如果没有正好一个项目, Single()
会引发异常。
Vehicles2.Add(Vehicles.OfType<Car>().Single());
我会注意到实际的问题是您将IEnumerable<Car>
强制转换为IVehicle
。 强制转换显然失败, as
操作符返回null
。
所以这里的解决方案,因为其他人已经指出的,是要么获得单一IVehicle
对象(例如通过.Single
或.First
),或整个序列添加到通过列表.AddRange
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.