наиболее эффективным будет избегать LINQ; -p
int count = customers.Count, id = customer.Id;
for (int i = 0; i < count; i++) {
if (customers[i].Id == id) {
customers[i] = customer;
break;
}
}
Если вы хотите использовать LINQ: это не идеально, но будет работать по крайней мере:
var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
customers[customers.IndexOf(oldCust)] = customer;
Он находит их по ID (используя LINQ), затем использует IndexOf
, чтобы получить позицию, и индексатор, чтобы обновить ее. Немного более рискованно, но только одно сканирование:
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;