Quel est le moyen le plus efficace d'identifier et de remplacer un objet dans ObservableCollection?
-
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);
}
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