c# – IEnumerable从类[]但不是从结构[].为什么?
|
鉴于:
public interface IMyInterface{
}
public class MyClass:IMyInterface{
public MyClass(){}
}
public struct MyStruct:IMyInterface{
private int _myField;
public MyStruct(int myField){_myField = myField;}
}
为什么我可以写: IEnumerable<IMyInterface> myClassImps = new[] {
new MyClass(),new MyClass(),new MyClass()
};
但不是: IEnumerable<IMyInterface> myStructImps = new[]{
new MyStruct(0),new MyStruct(1),new MyStruct(2)
};
这给我以下警告: 错误29无法将类型’MyApp.MyNS.MyStruct []’隐式转换为’System.Collections.Generic.IEnumerable< MyApp.MyNS.IMyInterface>‘ 而且必须写成: IEnumerable<IMyInterface> myStructImps = new IMyInterface[]{
new MyStruct(0),new MyStruct(2)
};
解决方法
问题是数组协方差.
This specification谈论它:
一个更简单的例子也是失败的 int[] c = new int[0]; object[] d = c; 而 string[] c = new string[0]; object[] d = c; 工作正常.你基本上是试图做同样的事情.您有一个值类型MyStruct的数组,并且您尝试将其隐式转换为IMyInterface,该数组协方差规范未涵盖. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
