gpt4 book ai didi

c# - 无法将源类型 'List' 转换为 IList

转载 作者:太空狗 更新时间:2023-10-29 19:55:49 25 4
gpt4 key购买 nike

这可能是一个非常简单的问题,但有些东西对我来说没有意义。

给定这个类:

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;

为什么我可以分配给 IEnumerable IClonable,而不是 IList ICloneable?

最佳答案

这称为协方差。 Eric Lippert 和 Jon Skeet(以及其他人)在回答这个问题时对协方差(及其双胞胎,逆变)做了一些很好的解释:Difference between Covariance & Contra-variance

基本上,您可以像枚举ICloneable 列表一样枚举Person 列表,不会出现问题因为您无法更改枚举。但是您不能将 Person 列表分配给 ICloneable 列表,因为这样您稍后可以尝试插入 ICloneable< 的一些其他派生词 在其中,这将导致严重违反类型安全。

关于c# - 无法将源类型 'List<Person>' 转换为 IList<ISomething>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26046286/

25 4 0