Quel est le moyen le plus efficace d'identifier et de remplacer un objet dans ObservableCollection?

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

  •  03-07-2019
  •  | 
  •  

Question

J'ai une méthode qui reçoit un objet client qui a changé de propriétés et je souhaite le sauvegarder dans le magasin de données principal en remplaçant l'ancienne version de cet objet.

Est-ce que quelqu'un connaît le bon moyen C # d'écrire le pseudo-code pour le faire ci-dessous?

    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);
    }
Était-ce utile?

La solution

Le moyen le plus efficace serait d'éviter 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 vous voulez utiliser LINQ: ce n'est pas idéal, mais cela fonctionnerait au moins:

    var oldCust = customers.FirstOrDefault(c => c.Id == customer.Id);
    customers[customers.IndexOf(oldCust)] = customer;

Il les trouve par ID (à l'aide de LINQ), puis utilise IndexOf pour obtenir la position et l'indexeur pour la mettre à jour. Un peu plus risqué, mais un seul scan:

    int index = customers.TakeWhile(c => c.Id != customer.Id).Count();
    customers[index] = customer;
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top