2012-03-13 24 views
0

入れ子のArrayListを作成しようとしていて、新しいArrayListを既存の要素の要素として追加しようとしましたが、動作しないようです。ここでは、コードがあります:ArrayListをArrayListに追加する

private void readDataFile() 
    { 
     // Open stream reader 
     StreamReader reader = new StreamReader(dataFileLoc); 

     string line = string.Empty; 
     line = reader.ReadLine(); 
     myArgus.Add(new ArrayList().Add(line)); 

     while ((line = reader.ReadLine()) != null) 
     { 
      // TODO 
     } 

     // Close the reader 
     reader.Close(); 
    } 

私はブレークポイントを追加し、myArgus(既存のArrayListの)内のデータを見れば、最初の要素はただ0です。これは、最初の要素が10016(これはテキストファイルの最初の行)であるArrayListである必要があります。

私はここで間違っていますか?

ありがとうございます!

編集:ArrayListを使用する必要があります。

+4

でそれを行うことができます。 –

+0

'List myArgus = new List (File.ReadAllLines(path));'を試したことがありますか? –

+0

ちょうど好奇心:ArrayListを使用するために*必須*はなぜですか? – Heinzi

答えて

3

ArrayList.AddはArrayListを返しませんが、単純にintです。

したがって、要素を2つのステップで追加する必要があります。

int index = myArgus.Add(new ArrayList()); 
((ArrayList)myArgus[index]).Add(line); 

注:エラーのこのタイプを避けるために、厳密に型指定されたコレクション(List<string>)を使用します。

+0

メソッド' Add'の定義がないオブジェクトについて、そのコードでエラーが発生しました。 'ArrayList myArgus = new ArrayList();' –

+0

myArgusをListにすることもできます。これで、何が入っているのかを知ることができます。あなたがmyArgusの中に持っていることを計画しているすべてがArrayListであれば、そこにあります。 –

+0

@MartinHoe、キャストを追加しました。 –

3

このライン:

myArgus.Add(new ArrayList().Add(line)); 

myArgusへの最初の要素として0追加されます。どうして?

戻り値
タイプ:可能System.Int32
値が追加された時のArrayListインデックスを次のようにArrayList.Addの戻り値が定義されているため。

あなたnew ArrayList()は、すべての項目が含まれていないので、lineはインデックス0に追加されます。あなたはおそらく書くことが何を意味するのか

でした:あなたがあるリストを入力使用するために何をすべきかを実際に

var subList = new ArrayList(); 
subList.Add(line); 
myArgus.Add(subList); 

、:

List<List<string>> myArgus; 

これはキャッチこれを助けコンパイラは、の代わりにintが追加された場合にエラーが発生する。

2

あなたは技術的にはまだあなたが本当に強く `一覧 `であなたのリストを入力しなければならない一歩

myArgus.Add(new ArrayList() { line }); 
関連する問題