2

假设我们有两种 ref 类型:Aand B,并且 A 实现了隐式转换运算符(到 B):

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

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

4

1 回答 1

3

一件有效且相当直接的事情是使用 Linq:

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

但是使用 Linq 的 Cast<> 方法不起作用:(看看为什么

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; });
于 2013-01-25T13:57:43.270 回答