的原因,這是不合法的,是因爲它是不是安全。假設它是合法的:
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