と の 2 つの ref 型があると仮定しましょう:A
とB
A は (B への) 暗黙のキャスト演算子を実装します。
class A
{
private B b;
public static implicit operator B(A a) { return a.b; }
}
class B
{
}
の配列を の配列に変換する最良の (簡潔かつ/または高速な) 方法A
はB
何ですか?
機能し、合理的に簡単なことの 1 つは、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);
これは、より詳細なアプローチを使用して、ラムダ以前の .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; });