的原因,这是不合法的,是因为它是不是安全。假设它是合法的:
List<Giraffe> giraffes = new List<Giraffe>();
List<Animal> animals = giraffes; // this is not legal; suppose it were.
animals.Add(new Tiger()); // it is always legal to put a tiger in a list of animals
但“动物”实际上是长颈鹿列表;你不能把老虎列入长颈鹿名单。
在C#这是不幸的是,法律参考类型的数组:
Giraffe[] giraffes = new Giraffe[10];
Animal[] animals = giraffes; // legal! But dangerous because...
animals[0] = new Tiger(); // ...this fails at runtime!
在C#4这是关于IEnumerable的合法的,但不的IList:
List<Giraffe> giraffes = new List<Giraffe>();
IEnumerable<Animal> animals = giraffes; // Legal in C# 4
foreach(Animal animal in animals) { } // Every giraffe is an animal, so this is safe
它是安全,因为IEnumerable<T>
不公开任何方法需要在吨T.
解决您的问题,您可以:
- 创建对象的新列表出来的老名单。
- 使该方法取对象[]而不是
List<object>
,并使用不安全的数组协方差。
- 使该方法通用的,所以它需要一个
List<T>
- 使该方法采取了IEnumerable
- 使该方法采取
IEnumerable<object>
并使用C#4
为什么你想演员列表到列表
[C#Cast List to List ](http://stackoverflow.com/questions/5115275/c-cast-listx-to-listy)也可能与[C#]密切相关 - Can List 可能被无情地转换到一个列表或类似?](http://stackoverflow.com/questions/1838687/c-can-a-listmyclass-be-seemlessly-cast-to-a-list- interface- or-similar) –
finnw
2011-05-04 10:47:53
如果可能那么你可以将* any *对象添加到列表中。违反“List”仅包含与Foo分配兼容的对象的规则。你必须创建一个新的列表。 –
2011-05-04 12:25:46