C# 如何在c中区分列表中的项目

C# 如何在c中区分列表中的项目,c#,asp.net,C#,Asp.net,我有一个listitem,我将此listitem添加到一个列表中多次,但有一个属性差异。。。 i、 e listitem具有DateOfService属性..k。。。 然后我将第一项添加到列表中。。。很好 我正在更改DateOfService属性并再次添加。。。 但之前添加的项目DateOfService也在更改。。。。 我怎样才能克服这个问题 样本码 嗨,我也这么做了,但没用 if (bills[index].FrequencyId == Convert.ToInt32(Frequency.D

我有一个listitem,我将此listitem添加到一个列表中多次,但有一个属性差异。。。 i、 e listitem具有DateOfService属性..k。。。 然后我将第一项添加到列表中。。。很好 我正在更改DateOfService属性并再次添加。。。 但之前添加的项目DateOfService也在更改。。。。 我怎样才能克服这个问题

样本码

嗨,我也这么做了,但没用

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);
                        }
                    }

它们都是相同的对象,不能添加多个对象。修复您正在讨论的问题的唯一方法是每次添加时创建新实例

我正在更改DateOfService属性并再次添加。。。但是 以前添加的项目DateOfService也在更改


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

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

大家好,我已经通过编写扩展方法将所有属性复制到另一个listitem,并添加了。。。 它工作得很好

这里是扩展方法


这可能有助于您使用iClonable接口。然后,您只需将克隆实例添加到列表中即可。非常感谢您提出的宝贵建议,我将尝试使用iClonable接口并访问您的网站。@VenkiChikkanti,您的行objadmissionteryvo=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);
                        }
                    }
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);
            }
        }