6

我知道 C# 支持这样的数组中的协方差:

object[] array = new string[3];

但是当它尝试编译以下代码时出现错误

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

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

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

4

2 回答 2

12

您必须指定 T 和 K 都是引用类型。数组协方差仅适用于引用类型。将声明更改为:

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

它工作正常。您不必指定 K 是引用类型,因为如果 T 是引用类型并且它派生自或实现 K,那么 K 也必须是引用类型。(至少我认为这是推理。where K : class为了清楚起见,添加也没有什么坏处。)

于 2009-01-24T19:47:25.867 回答
-1

类型 T 必须支持隐式转换为 KEg

T a = 新 T(); K b = a;

必须有效。

于 2009-01-24T19:37:07.353 回答