was ist der effizienteste Weg, um ein Objekt innerhalb einer ObservableCollection zu identifizieren und zu ersetzen?

StackOverflow https://stackoverflow.com/questions/806548

  •  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);
    }
War es hilfreich?

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
scroll top