次の宣言でエラーが発生するのはなぜですか?
List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});
エラー:void型をリストに変換できませんか?
AddRange関数は値を返さないためです。これは、次の2つの手順で実行する必要がある場合があります。
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
コレクション初期化子を使用することもできます(C#3.0以降を想定)。
List<int> intrs = new List<int> { 1, 2, 3, 45 };
280Z28による編集:これは、Addメソッドを使用するすべての場合に機能します。コンストラクターの括弧はオプションです。容量などのコンストラクターに物を渡したい場合は、上記のように記述List<int>(capacity)しただけでなく、を使用して渡すことができます。List<int>
オブジェクトとコレクションのイニシャライザーの詳細については、MSDNリファレンスを参照してください。
Dictionary<string, string> map = new Dictionary<string, string>()
{
{ "a", "first" },
{ "b", "second" }
};
AddRangeは、追加されたアイテムを含む新しいリストを返すのではなく、指定されたリストを変更するためです。これを示すために、を返しますvoid。
これを試して:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
元のリストを変更せずに新しいリストを作成する場合は、 LINQを使用できます。
List<int> intrs = new List<int>();
List<int> newIntrs = intrs.Union(new int[]{1,2,3,45}).ToList();
// intrs is unchanged
AddRangeは、(StringBuilderとは異なり)アイテムを追加したリストを返しません。あなたはこのようなことをする必要があります:
List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
AddRange()は次のように宣言されます:
public void AddRange(object[]);
リストは返されません。
ちなみに、C# 3.x (2.0 については不明) では、次のいずれかを実行できます。
List<int> intrs = new List<int>{1,2,3,45};
List<int> intrs = new []{1,2,3,45}.ToList(); // with Linq extensions
他の回答に加えて、範囲と戻りリストを追加する独自の拡張メソッドを追加できます (それは良い習慣ではありません)。
さらに別の方法があります。
List<int> intrs = new List<int>
{
1,
2,
3,
45
};
ところで、すでに intrs を宣言している場合は、括弧で宣言できます。
(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });
ただし、初期化構文の方が気に入っています。
他の人は AddRange が値を返さないことを既に述べていますが、代替案に与えられたサンプルに基づいて、List のコンストラクターは、前述の .NET 3.5 であるコードに加えて、T の IEnumerable も受け取ることを覚えておく必要があります。 +
例えば:
List<int> intrs = new List<int>(new int[]{2,3,5,7});