题
我知道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;
必须是有效的。
不隶属于 StackOverflow