gpt4 book ai didi

c# - 协变和泛型

转载 作者:太空狗 更新时间:2023-10-29 22:57:38 26 4
gpt4 key购买 nike

为什么下面的代码在一般情况下会出现编译错误?

abstract class Test<TItem> where TItem : IFoo
{
public IEnumerable<IFoo> Foos { get; set; }

public void Assign()
{
Foos = GetSomeSpecificList(); // works as expected
Foos = GetSomeGenericList(); // compile error?
}

protected abstract ICollection<TItem> GetSomeGenericList();

protected abstract ICollection<Foo> GetSomeSpecificList();
}

interface IFoo
{
}

class Foo : IFoo
{
}

我是不是遗漏了什么,或者不是因为每个 TItem 都必须是一个 IFoo,因此这个构造不可能违反类型安全吗?

最佳答案

您没有class 约束,因此TItem 可以是实现IFoostruct 类型界面。协变需要引用类型。当您添加 class 约束时,它可以顺利编译。

关于c# - 协变和泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36987606/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com