2

次の宣言でエラーが発生するのはなぜですか?

List<int> intrs = new List<int>().AddRange(new int[]{1,2,3,45});

エラー:void型をリストに変換できませんか?

4

9 に答える 9

16

AddRange関数は値を返さないためです。これは、次の2つの手順で実行する必要がある場合があります。

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
于 2009-11-18T18:23:36.307 に答える
7

コレクション初期化子を使用することもできます(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" }
    };
于 2009-11-18T18:25:45.960 に答える
6

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
于 2009-11-18T18:24:11.240 に答える
5

AddRangeは、(StringBuilderとは異なり)アイテムを追加したリストを返しません。あなたはこのようなことをする必要があります:

List<int> intrs = new List<int>();
intrs.AddRange(new int[]{1,2,3,45});
于 2009-11-18T18:24:01.190 に答える
2

AddRange()は次のように宣言されます:

public void AddRange(object[]);

リストは返されません。

于 2009-11-18T18:24:09.910 に答える
1

ちなみに、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

他の回答に加えて、範囲と戻りリストを追加する独自の拡張メソッドを追加できます (それは良い習慣ではありません)。

于 2009-11-18T18:29:26.160 に答える
0

さらに別の方法があります。

List<int> intrs =  new List<int>
                        {
                            1,
                            2,
                            3,
                            45
                        };
于 2011-04-12T19:44:47.497 に答える
0

ところで、すでに intrs を宣言している場合は、括弧で宣言できます。

(intrs = new List<int>()).AddRange(new int[] { 1, 2, 3, 45 });

ただし、初期化構文の方が気に入っています。

于 2009-11-18T18:50:59.653 に答える
0

他の人は AddRange が値を返さないことを既に述べていますが、代替案に与えられたサンプルに基づいて、List のコンストラクターは、前述の .NET 3.5 であるコードに加えて、T の IEnumerable も受け取ることを覚えておく必要があります。 +

例えば:

List<int> intrs = new List<int>(new int[]{2,3,5,7});
于 2009-11-18T19:53:03.163 に答える