leo*_*ora 4 .net c# arrays casting
我怎样才能转换自:
object[] myArray
Run Code Online (Sandbox Code Playgroud)
至
Foo[] myCastArray
Run Code Online (Sandbox Code Playgroud)
Meh*_*ari 13
要按Foo
类型过滤元素:
Foo[] myCastArray = myArray.OfType<Foo>().ToArray();
Run Code Online (Sandbox Code Playgroud)
要尝试将每个元素强制转换Foo
为:
Foo[] myCastArray = myArray.Cast<Foo>().ToArray();
Run Code Online (Sandbox Code Playgroud)
旁注:有趣的是,C#支持一种称为数组协方差的特征(错误?).这意味着,如果是可转换为引用,你可以隐式转换到(这可能是在某些情况下是不安全的,见下文).这仅适用于数组而不是其他内容.相反的(数组逆变)是不正确的,也就是说,你可以不投给.Derived
Base
Derived[]
Base[]
List<T>
object[]
string[]
C#4.0版本也将支持泛型的安全协方差和逆变.
数组协方差可能导致问题的示例:
void FillArray(object[] test) {
test[0] = 0;
}
void Test() {
FillArray(new string[] { "test" });
}
Run Code Online (Sandbox Code Playgroud)
我推测C#有数组协方差,因为Java有它.它确实不适合整体C#风格的做法.