¿Cuál es la forma más eficiente de identificar y reemplazar un objeto dentro de una colección Observable?
-
03-07-2019 - |
Pregunta
Tengo un método que recibe un objeto de cliente que ha cambiado las propiedades y quiero volver a guardarlo en el almacén de datos principal al reemplazar la versión anterior de ese objeto.
¿Alguien sabe la forma correcta de C # para escribir el pseudo código para hacer esto a continuación?
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);
}
Solución
El más eficiente sería evitar 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;
}
}
Si desea usar LINQ: esto no es ideal, pero funcionaría al menos:
var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
customers[customers.IndexOf(oldCust)] = customer;
Los encuentra por ID (usando LINQ), luego usa IndexOf
para obtener la posición, y el indexador para actualizarla. Un poco más riesgoso, pero solo un escaneo:
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow