我有一个业务对象类BusinessObject,它实现了一个接口IAlternateInterface。我已经有了一个方法,它将返回一个包含我想要的对象的BusinessObject的通用列表,但我希望将它们作为IAlternateInterface的列表。我尝试做类似下面的psudo代码,但我得到一个“无法转换源类型...到目标类型...”消息在Visual Studio中。转换列表的最佳方法是什么?
public List<BusinessObject> GetObjects(){
//logic to get the list
}
public List<IAlternateInterface> GetInterfaceObjects(){
return GetObjects();
}
答案 0 :(得分:2)
您正在寻找Enumerable.Cast<TResult>:
GetObjects().Cast<IAlternateInterface>.ToList();
只有在需要列表时才需要最后的ToList。投&LT; TResult&GT;返回IEnumerable&lt; TResult&gt;
答案 1 :(得分:2)
使用Cast
给出的两个答案适用于C#3 和 C#4 ...但是如果你使用的是C#4(和.NET 4),你也可以使用泛型方差以避免一步:
public List<IAlternateInterface> GetInterfaceObjects(){
return GetObjects().ToList<IAlternateInterface>();
}
答案 2 :(得分:0)
使用LINQ Cast
public List<IAlternateInterface> GetInterfaceObjects(){
return GetObjects().Cast<IAlternateInterface>().ToList();
}