我知道C#支持协方差在这样的阵列:

object[] array = new string[3];

但是,当它试图编译下面的代码我发现了一个错误

class Dummy<K,T> where T:K
{
    public void foo()
    {
        K[] arr = new T[4];
    }
}

它说 “无法隐式转换类型 'T []' 为 'K []'”

为什么我得到这个错误???

有帮助吗?

解决方案

您必须指定T和K的引用类型。阵列协方差仅适用于引用类型。声明更改为:

class Dummy<K,T> where T : class, K

和它工作正常。您不必指定K是引用类型,因为如果T是引用类型,它派生自或实现K,则K必须是引用类型了。 (至少我认为是这样的推理,它不会伤害到加where K : class以及为清楚起见。)

其他提示

T类型必须支持的隐式转换到K. E.g。

T A =新T(); ķB = A;

必须是有效的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top