转换对象数组

时间:2009-04-01 23:07:24

标签: c# .net arrays casting

我如何转换自:

object[] myArray

Foo[] myCastArray

1 个答案:

答案 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#服务风格。