私は過去数日間友人のために取り組んできたコードを少し持っています。高レベルでは、テキストファイルを解析してMDBに書き込みます。短いストーリーを短縮するために、私はアイテムのいくつかの処理を行うループのネストされたカップルを持っている。内部ループは、特定の場合にのみ呼び出されますが、そうである場合、それはいくつかの奇妙なことをしています。コレクションの値をforループで変更する
ArrayList CaseRecordItems = new ArrayList(); // this is created earlier
string baseTif = "sometext_"; // this is created earlier
CaseRecord cr = new CaseRecord(); (this gets populated with "stuff")
char increment = 'A';
for (int i = 0; i < FirstNames.Count; i++)
{
cr.Firstname = (string)FirstNames[i];
cr.Lastname = (string)LastNames[i];
if (FirstNames.Count > 1)
{
cr.Tif = baseTif + increment.ToString();
increment++;
}
CaseRecordItems.Add(cr);
}
ループは、たとえば2回実行され、cr.Tifの値をsometext_Aおよびsometext_Bに設定する必要があります。これは正しく動作しますが、コレクションに2番目のアイテムが追加されると、1番目のアイテムの値がコレクションに一致するように変更されます。
これは、これらのオブジェクトがどのようにインスタンス化されて渡されているかを私が理解していないためです。どんな洞察にも感謝します。
EDIT:素晴らしいフィードバック(と私のしびれ-nutzery)に基づいて
問題が解決されました。ダンの答えのおかげで、私はクローン機能を利用する前に試したコードにいくつかの変更を加えました(はい、私は実際にそれを試みました:P)。
新しいブロックは次のようになります。 ArrayList CaseRecordItems = new ArrayList(); //これは以前に作成されました string baseTif = "sometext_"; //これは以前に作成された CaseRecord cr = new CaseRecord(); //これは "stuff"で埋められます) char increment = 'A';
for (int i = 0; i < FirstNames.Count; i++)
{
CaseRecord cr2 = new CaseRecord();
cr2 = cr.Clone(); // preserves the data from outside
cr2.Firstname = (string)FirstNames[i];
cr2.Lastname = (string)LastNames[i];
if (FirstNames.Count > 1)
{
cr2.Tif = baseTif + increment.ToString();
increment++;
}
CaseRecordItems.Add(cr2);
}
超高速応答の皆様、ありがとうございます!
は、我々はより完全なコードを取得することはできますか? crはどこに作られていますか? –
crは、ループの直前にブロック内に作成されるポコです。 – kdmurray
foreachループもありません。 –