当前位置:  开发笔记 > 编程语言 > 正文

转换对象数组

如何解决《转换对象数组》经验,为你挑选了1个好方法。

我怎样才能转换自:

object[] myArray

Foo[] myCastArray

Mehrdad Afsh.. 13

要按Foo类型过滤元素:

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

要尝试将每个元素强制转换Foo为:

Foo[] myCastArray = myArray.Cast().ToArray();

旁注:有趣的是,C#支持一种称为数组协方差的特征(错误?).这意味着,如果是可转换为引用,你可以隐式转换到(这可能是在某些情况下是不安全的,见下文).这仅适用于数组而不是其他内容.相反的(数组逆变)是不正确的,也就是说,你可以不投给.DerivedBaseDerived[]Base[]Listobject[]string[]

C#4.0版本也将支持泛型的安全协方差和逆变.

数组协方差可能导致问题的示例:

void FillArray(object[] test) {
   test[0] = 0;
}
void Test() {
     FillArray(new string[] { "test" });
}

我推测C#有数组协方差,因为Java有它.它确实不适合整体C#风格的做法.



1> Mehrdad Afsh..:

要按Foo类型过滤元素:

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

要尝试将每个元素强制转换Foo为:

Foo[] myCastArray = myArray.Cast().ToArray();

旁注:有趣的是,C#支持一种称为数组协方差的特征(错误?).这意味着,如果是可转换为引用,你可以隐式转换到(这可能是在某些情况下是不安全的,见下文).这仅适用于数组而不是其他内容.相反的(数组逆变)是不正确的,也就是说,你可以不投给.DerivedBaseDerived[]Base[]Listobject[]string[]

C#4.0版本也将支持泛型的安全协方差和逆变.

数组协方差可能导致问题的示例:

void FillArray(object[] test) {
   test[0] = 0;
}
void Test() {
     FillArray(new string[] { "test" });
}

我推测C#有数组协方差,因为Java有它.它确实不适合整体C#风格的做法.

推荐阅读
农大军乐团_697
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有