这可能是一个相当简单的问题,但有一些东西我没有理解。
假设有以下类:
public class Person : ICloneable {
public object Clone()
{
Console.WriteLine("Hello, world");
return new Person();
}
}
为什么这是可以的?
List<Person> people = new List<Person> { new Person() };
IEnumerable<ICloneable> clonables = people;
但这不是吗?
List<Person> people = new List<Person> { new Person() };
IList<ICloneable> clonables = people;
为什么我可以将ICloneable分配给IEnumerable,但不能将ICloneable分配给IList?
IEnumererable<T>
是协变的,这就是为什么它能够工作。List<T>
不是,也不能成为协变的。 - vcsjonescloneables = people.Cast<ICloneable>().ToList();
。 - user2160375List<ICloneable>
,而不是重新分配旧的。 - Zev Spitz