1

リストまたは多次元配列に配列を追加したい(一度にすべてではない...)。しかし、なぜこれがそれほど難しいのか、私にはよくわかりません。

私がこれを持っているとしましょう:

    string[] a = { "h", "b"};
    string[] b = { "c", "a", "i" };
    string[] c = { "out", "in", "file", "test" };

    ArrayList x = null;

    x.Add(a); //error: Object reference not set to an instance of an object.
    x.Add(b);
    x.Add(c);

ArrayListの代わりに使用できますか?

string[,] x = null;

ただし、.Addするオプションはありません。

サイズが不明なstring[]の量が不明であるとしましょう。リスト/多次元配列にそれらを追加するにはどうすればよいですか?そしてもう一度:これらの文字列[]´を1つずつ追加したいと思います。何か案は?

4

6 に答える 6

6

NullReferenceExceptionリストが初期化されていないため、次のようになります。

string[] a = { "h", "b"};
string[] b = { "c", "a", "i" };
string[] c = { "out", "in", "file", "test" };

IList<string[]> x = new List<string[]>;

x.Add(a);
x.Add(b);
x.Add(c);

これは、2次元構造を構築していることを前提としています。配列を単一の文字列リストに「フラット化」する場合は、リストを作成し、List.AddRange代わりにそのメソッドを使用します。

于 2012-07-23T14:43:37.410 に答える
1

文字列配列を格納するArrayListのインスタンスを作成していません。追加してみてください

ArrayList x = new ArrayList();
x.Add(a);
...
...
于 2012-07-23T14:47:12.830 に答える
1
ArrayList x = null;
x.Add(a); 

それは次の場合に機能します:

  1. 次のインスタンスを作成しますArrayList

    ArrayList x = new ArrayList();
    

    あなたがしていたのは、ローカル変数を宣言することだけでした。

  2. ArrayList.Addから分離するように注意してArrayList.AddRangeください。前者は単一のオブジェクトを追加します。あなたの場合、最初の要素(最初の要素の後Add)はそれ自体が配列になります。「h」にアクセスするには、が必要x[0][0]です。AddRange渡された各コレクション要素を用語で取得し、コレクションに追加します。したがって、「h」を取得するとx[0]、「b」はになりますx[1]

私はあなたが欲しいと思います:

string[] a = { "h", "b"};
string[] b = { "c", "a", "i" };
string[] c = { "out", "in", "file", "test" };

ArrayList x = new ArrayList();

x.AddRange(a);
x.AddRange(b);
x.AddRange(c);
于 2012-07-23T14:47:14.347 に答える
1

キーワードnullは本質的に「オブジェクトなし」を意味します。したがって、あなたが書くとき、あなたはそこにない何かでメソッドx.Add(a)を呼び出そうとしています。Add

最初にリストを初期化する必要があります。これにより、次のラベルの付いたボックスに何かが表示されxます。

ArrayList x = new ArrayList(); 

これで電話x.add(a)をかけることができ、コードは期待どおりに機能します。

于 2012-07-23T14:48:04.270 に答える
1

ArrayListが欠落newしているため、次のようにする必要があります。

ArrayList x = new ArrayList();
    x.AddRange(a);
    x.AddRange(b);
    x.AddRange(c);

メソッドで配列を使用することはできませんAdd。コンパイルエラーは発生しませんが、オブジェクトにアクセスしている間は、次のToStringように言うと、型だけが 表示されます。

string[] a = { "h", "b"};
    x.Add(a);

次に、次のような要素をループしてみます。

foreach (var item in x)
     {
    Console.WriteLine(item);
     }

あなたは結果を得るでしょう:System.String[]そして私はあなたがそれを望まないことを願っています、それであなたAddRangeはタイプの引数を取るメソッドを使う必要がありICollectionます、それであなたは言います:

x.AddRange(a);

そして、次のような配列リストでループを実行する場合:

 foreach (var item in x)
         {
             Console.WriteLine(item);
         }

あなたは出力を得るでしょう、

h 
b
于 2012-07-23T15:06:40.190 に答える
0

それを行う1つの方法は次のとおりです。

List<List<string>> list = new List<List<string>>();

    list.Add(new List<string>(){
        "str1", "str2", "..."
    });

必ず以下を含めてください:using System.Collections.Generic;

于 2012-07-23T14:48:45.403 に答える