質問
整数配列と同じように値のリストを指定して配列リストに値を設定したいのですが、「add」メソッドを繰り返し呼び出さずにそれを行う方法がわかりません。
たとえば、{ 1, 2, 3, "string1", "string2" } を配列リストに割り当てたいとします。他の配列については、次のような割り当てを行うことができることはわかっています。
int[] IntArray = {1,2,3};
配列リストに対してこれを行う同様の方法はありますか?addrange メソッドを試しましたが、中括弧メソッドは ICollection インターフェイスを実装していません。
解決
配列リストには、Array クラスによって実装される ICollection を受け入れる ctor があります。
object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);
他のヒント
使用している C# のバージョンに応じて、異なるオプションがあります。
C# 3.0 にはコレクション初期化子があります。詳細は次のとおりです。 スコット・グーのブログ
これがあなたの問題の例です。
ArrayList list = new ArrayList {1,2,3};
また、コレクション オブジェクトを初期化する場合、ほとんどのコンストラクターには、AddRange と同様のコンポーネントを取るコンストラクターがありますが、繰り返しになりますが、これはオプションではない可能性があります。
あなたのコメントは、最初に見つかったコンポーネントだったために ArrayList を選択したことを示唆しています。
単純に整数のリストを探していると仮定すると、これがおそらく最良の方法です。
List<int> list = new List<int>{1,2,3};
C# 2.0 を使用している場合 (ジェネリックスはありますが、コレクション初期化子はありません)。
List<int> list = new List<int>(new int[] {1, 2, 3});
古いバージョンでは int[] 形式が正しくない可能性がありますが、配列内の項目数を指定する必要がある場合があります。
コレクション初期化子を備えた C# 3.0 を使用していないと思います。一時配列作成のオーバーヘッドを気にしない場合は、1.1/2.0 では次のように行うことができます。
ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});
(自分の質問に答えるようなものですが...)
私が探しているものに最も近い方法は、ArrayList.Adapter メソッドを使用することです。
object[] values = { 1, 2, 3, "string1", "string2" };
ArrayList AL = new ArrayList();
AL = ArrayList.Adapter(values);
//or during intialization
ArrayList AL2 = ArrayList.Adapter(values);
これは私が必要とするものには十分ですが、他の人が提案したように一時配列を作成せずに 1 行で実行できることを期待していました。