5

私の質問はかなり一般的に表現されているため、コードを提供しません(誰かが追加してほしいと思わない限り、しかし私の質問は十分に明確だと思います)。私は Array.ConvertAll メソッドに関する 2 つの記事を見てきましたが、それを直接使用する方法を自分で見つけることはできません。私が読んだ記事:

http://msdn.microsoft.com/en-us/library/exc45z53.aspx

「コンバーター」(記事の下部): http://www.codeproject.com/Articles/117611/Delegates-in-C-Attempt-to-look-inside-Part-4

これで、コンバーターがどのように機能し、どのように使用できるかを理解できましたが、コンバーターの直接的な必要性はわかりません。1 つのオブジェクトを別のオブジェクトに変換する実際の方法を完全に決定する必要があるため (たとえば、codeproject リンクでメソッド「ConvertToPersonInfo」または arroding Action/Lambda タイプ デリゲート)、宣言して新しいオブジェクトの新しい配列をインスタンス化し、古いオブジェクトの古い配列に対して foreach ループを実行し、そのループ内で目的の変数をコピーしますか?

Microsoft の記事によると、古い配列はまったく影響を受けないため、最終的な効果は変わりません。

ここでポイントが抜けていて、コンバーターを理解していませんでしたか、それとも本当に同じですか?

4

3 に答える 3

9

もちろん自分でもできます。これは、配列を作成してループを実行することにより、変換を単純化するメソッドにすぎません。

例えば:

 int[] newArr = new int[oldArr.Length];
 for (int i = 0; i < oldArr.Length; i++) {
   newArr[i] = Convert.ToInt32(oldArr[i]);
 }

対ちょうど:

 int[] newArr = Array.ConvertAll(oldArr, Convert.ToInt32);
于 2012-10-18T22:29:00.657 に答える
3

最終結果は型付けされたコードが少なくなり、何をしているのかが非常に明確になります。foreach ループの本体を調べて何が起こっているのかを調べる代わりに、このコレクションをそのコレクションに変換しています (メソッド名を読むだけでそれがわかります)。

于 2012-10-18T22:30:57.490 に答える
1

コード内の複数の場所で使用する必要がある場合は、もう少し再利用可能です。ただし、効率の面では、自分で実装する方が速いと思います。

于 2012-10-18T22:28:53.107 に答える