2

我有一个列表项,我将这个列表项多次添加到列表中,但有一个属性差异……即列表项具有 DateOfService 属性……k……然后我将第一项添加到列表中……很好,我正在改变DateOfService 属性并再次添加...但之前添加的项目 DateOfService 也在改变....我该如何克服这个问题...

示例代码

 if (bills[index].FrequencyId == Convert.ToInt32(Frequency.Daily))
   {
    for (int day = 0; day < remainedDays; day++)
     {

       bills[index].DateOfService = DateTime.Now.Date.AddDays(day).Date;
        remainedBills.Add(bills[index]);
     }
   }

嗨,我也这样做了,但没有用...

if (bills[index].FrequencyId == Convert.ToInt32(Frequency.Daily))
                    {
                        AdmissionEntryVo objAdmissionEntryVo = null;
                        for (int day = 0; day < remainedDays; day++)
                        {
                            objAdmissionEntryVo = new AdmissionEntryVo();
                            objAdmissionEntryVo = bills[index];
                            objAdmissionEntryVo.DateOfService = DateTime.Now.Date.AddDays(day).Date;
                            remainedBills.Add(objAdmissionEntryVo);
                        }
                    }
4

4 回答 4

1

它们都是同一个对象,您不会添加多个对象。解决您所说的问题的唯一方法是在每次添加时创建新实例。

于 2012-12-12T05:36:32.343 回答
1

我正在更改 DateOfService 属性并再次添加...但之前添加的项目 DateOfService 也在更改

那是因为您正在向列表添加对象引用,并且列表中的对象指向相同的引用,因此当您更改项目时,您会看到其他项目的效果。您需要创建对象的新实例,然后修改其属性并将其添加到列表中。

于 2012-12-12T05:37:12.047 回答
0

似乎它与“首选项和原始数据类型”有关。由于所有这些对象都是同一个对象,因此您不断将同一个对象添加到您的列表中。我的建议是在继续之前学习和区分“偏好和原始数据类型”。;) 干杯。

于 2012-12-12T05:44:41.350 回答
0

大家好,我已经通过编写扩展方法将所有属性复制到另一个列表项并添加......它工作正常......

这是扩展方法

public static void CopyPropertiesTo<T>(this T source, T dest)
        {
            var plist = from prop in typeof(T).GetProperties() where prop.CanRead && prop.CanWrite select prop;

            foreach (PropertyInfo prop in plist)
            {
                prop.SetValue(dest, prop.GetValue(source, null), null);
            }
        }
于 2012-12-12T07:06:08.497 回答