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#支持一种称为数组协方差的特征(错误?).这意味着,如果是可转换为引用,你可以隐式转换到(这可能是在某些情况下是不安全的,见下文).这仅适用于数组而不是其他内容.相反的(数组逆变)是不正确的,也就是说,你可以不投给.DerivedBaseDerived[]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#风格的做法.