假设我们有两种 ref 类型:A
and B
,并且 A 实现了隐式转换运算符(到 B):
class A
{
private B b;
public static implicit operator B(A a) { return a.b; }
}
class B
{
}
将数组转换为数组的最佳(简洁和/或快速)方法A
是B
什么?
一件有效且相当直接的事情是使用 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
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; });