次のコードがあります
List<WorkingRecord> recordListz = new List<WorkingRecord>();
-----other unrelated code----------
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordListz は正常に作成されます (まあ、後で詳しく説明します)。IF_Export メソッドは正常にリストを返します。次に、for ループにブレークポイントを配置し、recordListz オブジェクトにカーソルを合わせると、正常に見えます (10 個のレコードが含まれています)。カウントも 10 レコードを報告します。ただし、ループを実行しようとするとすぐに、「オブジェクトがオブジェクトのインスタンスに設定されていません」というコードエラーが発生します(リスト内のオブジェクトはnullではありません)。さらに、この時点でオブジェクトを簡単に監視すると、値が ['' is null] であると主張します。
まず、recordListz オブジェクトの作成に関する問題について説明します。実際には、recordListz のインスタンス化とメソッド呼び出しの間に、別のコード (上記のコードとはまったく関係ありません) があります。もともと私は次のコードを持っていました
List<WorkingRecord> recordListz = IF_Export(out ifRecCount,out WrittenRecords);
ただし、これにより、呼び出されたメソッドが完全に細かいリストを返したにもかかわらず、「オブジェクトがオブジェクトのインスタンスに設定されていません」というエラーが発生しました (メソッドの戻り行にブレークポイントを配置することで確認されました)。
私はそれを次のように分割しました
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
ただし、これは最初の行で「オブジェクトがオブジェクトのインスタンスに設定されていません」というエラーが発生しました。私は、正常に動作し、それを呼び出すコードと同じクラスにある IF_Export メソッドで呼び出されるのとまったく同じ行を持っています...
行をコードの先頭に移動すると、エラーが発生しなくなりましたが、ループ エラーが発生しました。
一体何が起こっているのか、私はこれまで見たことがない。
- - - - - - - - - - - -アップデート - - - - - - - - - -
次のコードがあればOK
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordListz インスタンス化行で、「オブジェクトがオブジェクトのインスタンスに設定されていません」というエラーが表示される
ただし、次のコードがある場合
-----other unrelated code----------
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
その後、recordListz のインスタンス化は引き続きエラーになりますが、recordLista のインスタンス化は正常に機能します。
さらに、次のコードがある場合
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordListz = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordListz.Count; i++)
{
//do something
}
recordLista も正常に動作します。
--------別のアップデート------
次のコードを入れると
-----other unrelated code----------
List<int> WrittenRecords=new List<int>();
List<WorkingRecord> recordLista = new List<WorkingRecord>();
List<WorkingRecord> recordListz = new List<WorkingRecord>();
recordLista = IF_Export(out ifRecCount,out WrittenRecords);
for (int i = 0; i < recordLista.Count; i++)
{
//do something
}
エラーが発生したのは recordLista のインスタンス化です........
--------更新 3 ---------------
わかりました、奇妙なことが起こっている時点を見つけました。
コードはif文の中にあります
if (dsExportRecords != null && dsExportRecords.Tables[0].Rows.Count != 0)
dsExportRecords はデータセットです。コードを if ステートメント内にすぐに配置すると、奇妙なことが起こりますが、if ステートメントの直前であれば、すべて問題ありません。