gpt4 book ai didi

c# - 如何将 List 分配给 IEnumerable 参数?

转载 作者:太空狗 更新时间:2023-10-30 00:11:56 25 4
gpt4 key购买 nike

我理解派生类的List<>不能直接赋值给基类的List<>。但是它如何允许将派生类的相同 List<> 分配给 IEnumerable<> 类型的基类参数。

public class Base 
{}

public class Derived : Base
{}

public class Test
{
// inside some method...
List<Derived> someElements;
ReadElements(someElements);

public void ReadElements(List<Base> elements) // this throws compile error
{...}

public void ReadElements(IEnumerable<Base> elements) // this one works
{...}
}

我知道 ListIEnumerable 的实现,支持索引和修改元素,但是这部分我好像没看懂?有人可以解释一下吗?谢谢。

最佳答案

因为 IEnumerable<T> 的声明is in fact :

public interface IEnumerable<out T> : IEnumerable

...和 ​​out位表示 T是协变的并且接受子类型。

鉴于 List<T> 的声明没有方差注释,因此 T是不变的。

关于c# - 如何将 List<DerivedClass> 分配给 IEnumerable<BaseClass> 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8842736/

25 4 0