本文介绍了IEnumerable的< IMyInterface的>隐式地从类[]而不是从结构体[]。为什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设:
公共接口IMyInterface的{
}
公共MyClass类:IMyInterface的{
公共MyClass的(){}
}
公共结构MYSTRUCT:IMyInterface的{
私人诠释_myField;
公共MYSTRUCT(INT MyField的){_ MyField的= MyField的;}
}
我为什么可以这样写:
的IEnumerable< IMyInterface的> myClassImps =新[] {
新MyClass的(),
新MyClass的(),
新MyClass的()
};
但不是:
的IEnumerable< IMyInterface的> myStructImps =新[] {
新MYSTRUCT(0),
新MYSTRUCT(1),
新MYSTRUCT(2)
};
这给了我以下警告:
错误29无法隐式转换类型'MyApp.MyNS.MyStruct []'到'System.Collections.Generic.IEnumerable< MyApp.MyNS.IMyInterface>
而必须这样写:
的IEnumerable< IMyInterface的> myStructImps =新IMyInterface的[] {
新MYSTRUCT(0),
新MYSTRUCT(1),
新MYSTRUCT(2)
};
解决方案
的问题是阵列协方差。 谈论它:
A simpler example of this that also fails is
int[] c = new int[0];
object[] d = c;
while
string[] c = new string[0];
object[] d = c;
works fine. You are basically trying to do the same thing. You have an array of value types MyStruct
and you are trying to implicitly cast it to IMyInterface
, which is not covered by the array covariance specification.
这篇关于IEnumerable的< IMyInterface的>隐式地从类[]而不是从结构体[]。为什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!