0

自分が書いた関数の問題に気づきました。問題に気づきましたが、「修正」は状況を悪化させるだけです。

この関数はデータベースに接続してselectクエリを実行し、任意の行をとして返しますList<List<string>>。意図した動作ではList<string>、すべての行に対して1が返され、すべての行に複数の列があるため、リストインデックスを使用してそれらにアクセスできます。

                    try
                    {
                        ///Open connection before we can read
                        dataConnection.Open();

                        ///Prepare to read
                        reader = dataCommand.ExecuteReader();

                        // Call Read before accessing data.
                        while (reader.Read())
                        {
                            myTestData.Clear();
                            for (int i = 0; i < howManyColumns; i++)
                            {
                                ///Add columns to myTestData list
                                myTestData.Add(reader.GetValue(i).ToString());
                            }
                            ///Add myTestData list to dataRows
                            dataRows.Add(myTestData);
                        }
                    }
                    catch (SqlException exSql)
                    {
                        Program.displayExError(exSql, true);
                    }

問題は次のとおりです。

myTestData.Clear();

リストをクリアしようとしたので、次にリストのリストに1つのリストを追加すると、要素がなくなり、すべての行が同じリストに追加されるのを避けますが、そうすると、myTestData.Clear();リストの内容が消去され、リストのリストが消去されます。すべての内容も失います。最初のリストに追加せずにデータを保持するためのアイデアはありますか?

PS:私が行った修正myTestData.Clear();は、問題の原因となる追加でしたが、それを削除すると、すべての行が最初のリストに追加され、使用されなくなります。問題が不明な場合は、明確にするために私に知らせてください

Thxみんな!

4

4 に答える 4

1

myData追加するオブジェクト参照と考えてください。によって保持されている参照dataRowsをクリアすると、まったく同じ変更が反映されます。myDatadataRows

List<string>したがって、データリーダーから行を読み取るたびに、新しいものを作成する必要があります。

于 2013-03-26T23:01:27.297 に答える
0

既存のリストを作成するのではなく、新しいリストを作成する必要がありますClear。に変更mydata.Clear()myData = new List<string>()ます。

于 2013-03-26T22:56:01.067 に答える
0

私は推測を危険にさらし、forループでリストを再初期化する必要があると言いますので、代わりに

myTestData.Clear();

試す

myTestData = new List<string>();
于 2013-03-26T22:59:45.577 に答える
0

私はあなたList<List<string>>が例からdataRowsと呼ばれているのを楽しんでいます。

リストをクリアしてdataRowsリストへの参照を追加するのではなく、新しいリストを作成して保存することができます。

try
{
  ///Open connection before we can read
  dataConnection.Open();

  ///Prepare to read
  reader = dataCommand.ExecuteReader();

  // Call Read before accessing data.
  while (reader.Read())
  {
    List<string> myTestData = new List<string>();
    for (int i = 0; i < howManyColumns; i++)
    {
      ///Add columns to myTestData list
      myTestData.Add(reader.GetValue(i).ToString());
    }
    ///Add myTestData list to dataRows
    dataRows.Add(myTestData);
  }
}
catch (SqlException exSql)
{
  Program.displayExError(exSql, true);
}
于 2013-03-26T23:00:17.223 に答える