我如何转换:

object[] myArray


Foo[] myCastArray

最佳答案

Foo 类型过滤元素:

Foo[] myCastArray = myArray.OfType<Foo>().ToArray();

尝试将每个元素转换为 Foo 类型:
Foo[] myCastArray = myArray.Cast<Foo>().ToArray();

旁注:有趣的是,C# 支持名为 array covariance 的功能(错误功能?)。这意味着如果 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# 做事风格。

关于c# - 转换对象数组,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/707686/

10-16 16:21
查看更多