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也没有什么坏处.)

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...