Кажется, что ваш PartUsed
является классом (например, ссылочный тип ), поэтому u.PartsUsed
на самом деле является набором ссылок на некоторые объекты, поэтому usedParts.Add(rep)
фактически добавляет ту же ссылку ( object) на usedParts
, и когда вы получаете и изменяете один из них в usedParts[usedParts.FindIndex(f => f.Repair.Name == rep.Repair.Name)].RepairPartQuantity += rep.RepairPartQuantity
, вы фактически изменяете общий экземпляр. Это поведение можно также продемонстрировать следующим образом:
class MyClass { public int Prop { get; set; } }
var ref1 = new MyClass{Prop = 1};
var ref2 = ref1;
ref2.Prop = 2;
Console.WriteLine(ref2.Prop);// prints 2
Один из способов - создать клон PartUsed
для помещения в usedParts
, но в вашем конкретном случае кажется, что вы можете использовать Dictionary<string, int>
(при условии, что RepairPartQuantity
равно int
) для usedParts
. Примерно так:
var usedParts = new Dictionary<string, int>();
.....
foreach (var rep in u.PartsUsed)
{
if (!usedParts.ContainsKey(rep.Repair.Name))
{
usedParts[rep.Repair.Name] = rep.RepairPartQuantity;
}
else
{
usedParts[rep.Repair.Name] += rep.RepairPartQuantity;
}
}
foreach (var kvp in usedParts)
{
str.AppendFormat(str.Length > 0 ? Environment.NewLine + "{0} - {1}" : "{0} - {1}", kvp.Value, kvp.Key);
totalCount += kvp.Value;
}