каков наиболее эффективный способ идентифицировать и заменить объект в ObservableCollection?
-
03-07-2019 - |
Вопрос
У меня есть метод, который получает объект customer с измененными свойствами, и я хочу сохранить его обратно в основное хранилище данных, заменив старую версию этого объекта.
Кто-нибудь знает правильный способ C # написать псевдокод для выполнения этого ниже?
public static void Save(Customer customer)
{
ObservableCollection<Customer> customers = Customer.GetAll();
//pseudo code:
var newCustomers = from c in customers
where c.Id = customer.Id
Replace(customer);
}
Решение
Тот Самый наиболее эффективный было бы лучше избегать 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;
Он находит их по идентификатору (используя LINQ), затем использует IndexOf
чтобы получить позицию, а индексатор - обновить ее.Немного более рискованно, но только одно сканирование:
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;
Не связан с StackOverflow