1

私は以下のコードを持っています。ValidClaimControl Numbersにない場合は、以下の条件に基づいてRecoveryRecords変数のデータを削除しています。

RecoveryRecords.Remove(s)で行を実行した後、レコード変数からも削除しています。私は実際にrecords変数からのデータが必要です。

レコード変数にデータを保持するにはどうすればよいですか?

List<List<Field>> records = new List<List<Field>>();
List<List<Field>> RecoveryRecords = new List<List<Field>>();

//Some Logic here to populate records variable

RecoveryRecords = records;
List<string> validClaimControlNo = new List<string>();

//Some Logic here to populate validClaimControlNo variable

foreach (List<Field> s in RecoveryRecords.ToList())
{
    foreach (Field f in s)
    {
        if (!(validClaimControlNo.Contains(f.Value)))
          RecoveryRecords.Remove(s);
    }
}
4

6 に答える 6

6

この行はあなたが思うことをしません、私は疑っています:

RecoveryRecords = records;

オブジェクトへの参照recordsであるの値を、の新しい値としてコピーしているだけです。2つの変数は同じオブジェクトを参照します。からのデータのコピーを含む新しいリストが必要な場合は、明示的に行う必要があります。RecoveryRecordsrecords

RecoveryRecords = new List<List<Field>>(records);

また

RecoveryRecords = records.ToList();

これでさえ、リストの浅いコピーにすぎないことに注意してください-あなたが書いた場合:

RecoveryRecords[0].Add(new Field());

records[0]どちらも同じへの参照であるため、その変更はにも表示されますList<Field>

于 2012-10-05T18:50:26.240 に答える
5

要素を新しいリストに列挙することによって

RecoveryRecords = records.ToList();

(foreachループで行うのと同じようにRecoveryRecords.ToList()

于 2012-10-05T18:49:50.907 に答える
2

次の2行を置き換えます。

List<List<Field>> records = new List<List<Field>>();
List<List<Field>> RecoveryRecords = new List<List<Field>>(records);

次の行を削除します。

RecoveryRecords = records;
于 2012-10-05T18:50:59.303 に答える
1

これが理由です:

RecoveryRecords = records;

別々のリストを指す2つの変数はなく、同じリストを指す2つの変数があります。

リストのコピーを作成します。

RecoveryRecords = new List<List<Field>>(records);

List<Field>注:これで2つの別々のリストができましたが、リストの項目は両方のリストで同じであることに注意してください。

于 2012-10-05T18:51:40.363 に答える
1

この行の使用:

RecoveryRecords = records;

のポインタrecordsRecoveryRecords参照records)に渡しています。これは、リスト内のすべての変更がで有効であることを意味しRecoveryRecordsます。したがって、リストのクローンを作成する必要があります。これは、次のコードを使用して実行できます。

RecoveryRecords = new List<List<Field>>(records);
于 2012-10-05T18:52:45.040 に答える
0

このコード行を使用してレコードオブジェクトを浅くコピーしています

RecoveryRecords = records;

ディープコピーを行う必要があります

RecoveryRecords = new List<List<Field>>(records);

これは、多くのプログラミング言語に共通のテーマです。ウィキペディアはそれをかなりよく説明しています、http://en.wikipedia.org/wiki/Object_copy

于 2012-10-05T18:56:21.567 に答える