我如何转换:
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/