Qual è il modo più efficiente per identificare e sostituire un oggetto all'interno di ObservableCollection?
-
03-07-2019 - |
Domanda
Ho un metodo che riceve un oggetto cliente che ha modificato le proprietà e voglio salvarlo nell'archivio dati principale sostituendo la vecchia versione di quell'oggetto.
Qualcuno conosce il modo C # corretto per scrivere lo pseudo codice per farlo di seguito?
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);
}
Soluzione
Il più efficiente sarebbe evitare 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;
}
}
Se vuoi usare LINQ: questo non è l'ideale, ma funzionerebbe almeno:
var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
customers[customers.IndexOf(oldCust)] = customer;
Li trova per ID (usando LINQ), quindi usa IndexOf
per ottenere la posizione e l'indicizzatore per aggiornarla. Un po 'più rischioso, ma solo una scansione:
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow