更新列表中的子项会更新C#中的所有项 [英] Updating child items in List updates all Items in C#

查看:88
本文介绍了更新列表中的子项会更新C#中的所有项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的清单:

public class PayRateDaysModel
{
    public string day_name { get; set; }
    public List<RateList> multiplier { get; set; }
}
public class RateList
{
    public double start_after { get; set; }
    public double rate_multiplier { get; set; }
}

当我尝试更新PayRateDaysModel的乘数中的任何值时,然后更新PayRateDaysModel的所有乘数.我想只更新当前项目.下面是我的代码:

when I'm trying to update any value in multiplier of PayRateDaysModel then its updating all multiplier values of PayRateDaysModel. Iw ant to update only current item. Below is my code :

var dayExists = daysModel.Where(x => x.day_name == day_name).FirstOrDefault();
if(dayExists==null)
{
    PayRateDaysModel days = new PayRateDaysModel();
    days.day_name = day_name;
    days.multiplier = rate_list;
    daysModel.Add(days);
}
else
{
    //update
    dayExists.day_name = "abc";
    dayExists.multiplier.FirstOrDefault().rate_multiplier = 1;
}

推荐答案

根据向我们显示的内容,我认为您正在像rate_list = new RateList(…)这样的上方创建rate_list,并将其设置为您所有的时间在days.multiplier = rate_list;中.由于您没有为每个元素重新创建该rate_list,因此,只要您在dayExists中的某一天对其进行更改,您也将对所有其他元素都进行更改. 所以你应该做这样的days.multiplier = new RateList(…);

Based on what you have shown to us I would think that you are creating the rate_list somewhere above like rate_list = new RateList(…) and you are setting this to all of your days in days.multiplier = rate_list;. Since you did not recreate that rate_list for every element, any time you change it in one of your dayExists you will change it for all the others as well. So you should do something like this days.multiplier = new RateList(…);

这篇关于更新列表中的子项会更新C#中的所有项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆