【问题标题】:Reuse item from a collection重用集合中的项目
【发布时间】:2014-05-31 22:07:32
【问题描述】:

我有一个循环遍历集合中项目的 foreach 循环。如果该项目已经存在,是否可以重用元素的属性?例如:

foreach(example item in creditItems)
{
    item.Total += item.Quantity;
}

假设creditItems 中有 3 个项目。第一项和第三项是相同的,至少它们应该是相同的。问题是它们被认为是完全不同的项目(这是可以理解的)。问题在于,当它循环到最后一项时,item.Quantity 不会添加到原始的 item.Total,因为它被认为是一个新项目,所以总数是 0 + item.Quantity。是不是我的逻辑错了?

【问题讨论】:

  • 我认为这是不可能的。我可能会使用单独的变量来进行求和,或者使用 linq 语句
  • item.Quantity 不会添加到原始 item.Total 中,因为它被认为是新项目 - 那么它 新的,即这是一个不同的对象。如果这是您的要求,您应该预先确保每个项目在逻辑上都是唯一的。否则你最终会到处添加特殊情况,你的代码就会变得一团糟。尽早执行不变量。

标签: c# loops foreach


【解决方案1】:

如果我没有正确理解你,那么你在列表、数组、... 等等中有 2 个或更多“相同”项目。

假设 Item 有一个 ID,它决定了它的类型,例如10 是汽车,11 是卡车……随便吧。

然后,您可以使用 LINQ 按此 ID 对这些项目进行分组:

var itemsGroupedById = creditItems.GroupdBy(item=> item.ID);

foreach(var idGroup in itemsGroupedById)
{
    decimal total = idGroup.Sum(item => item.Quantity); // This sums up all quantities of the same ItemId
    foreach(var item in idGroup) 
        item.Total = total; // This makes sure all items of the same kind store the total
    Console.WriteLine("The total of item {0} is {1}", idGroup.Key, total);

}

【讨论】:

【解决方案2】:

您的第一个和第三个项目可能是同一个项目,但它们不是同一个对象。您可能有一个相同的项目 ID 字段。

如果您不希望集合中存在两个具有相同 ID 的项目,请确保集合中没有两个具有相同 ID 的项目。如果您确实想要两个具有相同 ID 的项目,您应该决定如何处理这种情况 - 您是否更新第一个项目?第二个?他们都?

决定你想做什么,从那里实施将更加直接。

【讨论】:

    猜你喜欢
    • 2020-02-05
    • 1970-01-01
    • 1970-01-01
    • 2013-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多