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