类型转换不像4.0那样在3.5中工作

时间:2011-03-19 18:04:38

标签: c# .net .net-3.5 .net-4.0

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

中获得类似的行为

3 个答案:

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

没有Co / Contravariance,你必须自己投射:

var entities = foos.Cast<Entity>(); // yields IEnumerable<Entity>