was ist der effizienteste Weg, um ein Objekt innerhalb einer ObservableCollection zu identifizieren und zu ersetzen?
-
03-07-2019 - |
Frage
Ich habe eine Methode, die ein Kundenobjekt empfängt, die Eigenschaften verändert hat und ich möchte es in die Hauptdatenspeicher zurück zu sparen, indem die alte Version des Objekts zu ersetzen.
Kennt jemand den richtigen C # Weg, um den Pseudo-Code zu schreiben, das unten zu tun?
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);
}
Lösung
Die effizienteste wäre LINQ ;-p zu vermeiden
int count = customers.Count, id = customer.Id;
for (int i = 0; i < count; i++) {
if (customers[i].Id == id) {
customers[i] = customer;
break;
}
}
Wenn Sie LINQ verwenden: dies ist nicht ideal, aber zumindest funktionieren würde:
var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
customers[customers.IndexOf(oldCust)] = customer;
Es findet sie durch ID (mit LINQ), dann IndexOf
verwendet die Position zu bekommen, und der Indexer, sie zu aktualisieren. Ein bisschen riskant, aber nur eine Scan:
int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
customers[index] = customer;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow