1. ホーム
  2. c#

C# 配列全体をキャストする?

2023-09-08 01:22:22

質問

私はこのように見ています Array.ConvertAll メソッドがありますが、これには Converter を引数として必要とします。私のクラスではすでに暗黙のコンバータを定義しているのに、なぜコンバータが必要なのかわかりません。

    public static implicit operator Vec2(PointF p)
    {
        return new Vec2(p.X, p.Y);
    }

の配列をキャストしようとしています。 PointF の配列に Vec2 s. これを行うための良い方法はありますか?それとも、私はそれを吸って、(別の)コンバータを書くか、要素にループをかけるべきですか?

どのように解決するのですか?

提案されているLINQの解決方法は Cast /'Select' でも良いのですが、ここでは配列を使っていることが分かっているので ConvertAll を使う方がより効率的で、同じようにシンプルです。

var newArray = Array.ConvertAll(array, item => (NewType)item);

使用方法 ConvertAll というのは

a) 配列は一度だけ反復されます。

b) 配列に対してより最適化された処理である。 IEnumerator<T> ).

をさせないように Converter<TInput, TOutput> 型は単なるデリゲートなので、上記のようにラムダ式を渡すことができます。