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,该数组协方差规范未涵盖. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |