C# – 通用类中的阵列协方差

前端之家收集整理的这篇文章主要介绍了C# – 通用类中的阵列协方差前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道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也必须是引用类型. (至少我认为这是推理.为了清晰起见,添加K:class也没有什么坏处.)

猜你在找的C#相关文章