public class Entity
{
public int Id {get;set;}
}
public class Foo : Entity
{
public string Name {get;set;}
}
//foos is an IEnumerable<Foo> with List<Foo> value
foos as IEnumerable<Entity> //works in .net 4.0, doesn't work in 3.5,
如何在3.5
中获得类似的行为答案 0 :(得分:7)
这种结构依赖于.net 4.0中引入的协方差/逆变。你将无法在早期版本上使用它。
这是一篇很好的文章:http://blogs.msdn.com/b/csharpfaq/archive/2010/02/16/covariance-and-contravariance-faq.aspx
答案 1 :(得分:3)
正如JoDG指出的那样,这是由c#4中新的协方差特征启用的 - 你在c#3中最接近的是:
IEnumerable<Entity> entities = foos.Cast<Entity>();
答案 2 :(得分:1)
var entities = foos.Cast<Entity>(); // yields IEnumerable<Entity>