0

リストに新しく追加されたデータは、の以前の値を置き換えますlist<>。次のコードでは、すべてのアイテムに情報が listRM含まれていますAddress。私は何が間違っているのですか?

 public void Assign(Rprts PrevItem, Rprts CurrentItem, List<Fields> listRM)
        {
            Fields field = new Fields();
            field.hding = "Name :";
            field.FName = PrevItem.fname;
            field.LName = PrevItem.lname;
            field.addrs1 = "";
            field.addrs2 = "";
            field.City = "";


            listRM.Add(field);


            field.hding = "Address :";
            field.Qty = "";
            field.Name = "";
            field.Dept = "";
            field.addrs1 = "ABC";
            field.addrs2 = "XYZ";
            field.City = "UVW";
            listRM.Add(field);

        }
4

2 に答える 2

1

Field追加するエントリごとに新しいインスタンスを作成する必要があります。

初めて呼び出すときは、オブジェクトへの参照listRM.Add(field)渡します(これも単なる参照です)。このオブジェクトを変更すると、リストが指すオブジェクトも変更されます。field

これを確認するには、2回目の呼び出しの前にブレークポントを配置し、の値との値のlistRM.Add(field)両方を検査します。たとえば、QuickWatchを使用する必要はありません。fieldlistRM.Results

新しいアイテムの作成を開始するには、次のようにします。

field = new Field();
field. // set properties again
listRM.Add(field);
于 2013-03-14T00:04:23.347 に答える
1

クラスのインスタンスを1つ作成Fieldsし、同じオブジェクトをリストに2回追加して、途中でそのオブジェクトを変更しました。したがって、リストには、予想どおり、そのオブジェクトが2回含まれますが、両方のリスト項目は同じ変更されたインスタンスを指しますfield。リストに追加する予定のすべてのアイテムに対して、新しいオブジェクトを作成してみてください。 Fields field = new Fields();

于 2013-03-14T00:07:51.070 に答える