我如何转换自:
object[] myArray
到
Foo[] myCastArray
答案 0 :(得分:13)
按Foo
类型过滤元素:
Foo[] myCastArray = myArray.OfType<Foo>().ToArray();
尝试将每个元素转换为Foo
类型:
Foo[] myCastArray = myArray.Cast<Foo>().ToArray();
附注:有趣的是,C#支持名为array covariance的功能( misfeature?)。这意味着如果Derived
是可以转换为Base
的引用,则可以隐式将Derived[]
强制转换为Base[]
(在某些情况下可能不安全,请参阅下文)。这是真的仅适用于数组而不是List<T>
或其他内容。相反(数组逆变)不正确,也就是说,您无法将object[]
强制转换为string[]
。
C#4.0版也将支持仿制药的安全协方差和逆变。
数组协方差可能导致问题的示例:
void FillArray(object[] test) {
test[0] = 0;
}
void Test() {
FillArray(new string[] { "test" });
}
我推测C#有数组协方差,因为Java有它。它实际上并不适合整体C#服务风格。