.NET转换隐式可转换类型的数组

时间:2013-01-25 13:56:22

标签: .net arrays casting

假设我们有两个ref类型:AB,A实现隐式转换运算符(到B):

class A
{
    private B b;
    public static implicit operator B(A a) { return a.b; }
}
class B
{
}

A数组转换为B数组的最佳(简洁和/或快速)方法是什么?

1 个答案:

答案 0 :(得分:3)

有一件事是合理的直接使用Linq:

A[] a = new A[5];//initialize elements
B[] b = a.Select(anA => (B)anA).ToArray();

然而使用Linq的Cast<>方法不起作用:(see why

B[] b2 = a.Cast<B>.ToArray();//throws InvalidCastException

<小时/> 更新:这是一个不使用Linq:

B[] b = Array.ConvertAll(a, elem => (B) elem);

这可以在pre-lambda .NET 2.0中使用更详细的方法:

B[] b = Array.ConvertAll(a, 
            new Converter<A, B>(delegate(A elem) { return (B) elem; }));

......可能使用较短的版本:

B[] b = Array.ConvertAll(a, delegate(A elem) { return (B) elem; });