【问题标题】:Updating child items in List updates all Items in C#更新列表中的子项会更新 C# 中的所有项
【发布时间】:2019-02-11 05:56:31
【问题描述】:

这是我的清单:

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 的所有乘数。我想只更新当前项目。下面是我的代码:

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

【问题讨论】:

  • 试试dayExists.multiplier[0].rate_multiplier = 1;
  • 欢迎来到 StackoverFlow。请take the tour
  • 它仍在更新 PayRateDaysModel 中所有项目的 rate_multiplier 值
  • 我只想更新 dayExists 的值,但它会更新整个 PayRateDaysModel
  • 只有当代码在循环中运行并且您没有在循环中设置中断以便一旦设置一次就不会再次设置乘数的值时,才会发生这种情况。跨度>

标签: c# model-view-controller


【解决方案1】:

根据您向我们展示的内容,我认为您正在上面某处创建 rate_list,例如 rate_list = new RateList(…),并且您将其设置为您在 days.multiplier = rate_list; 中的所有日子。由于您没有为每个元素重新创建该 rate_list,因此无论何时您在其中一个 dayExists 中更改它,您也会为所有其他元素更改它。 所以你应该这样做days.multiplier = new RateList(…);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多