Qu'est-ce qu'un bon moyen (rapide, efficace, etc.) de stocker un instantané d'une collection pour une vérification IsDirty ultérieure?instantané de collection pour la comparaison IsDirty
Cheers,
Berryl
Qu'est-ce qu'un bon moyen (rapide, efficace, etc.) de stocker un instantané d'une collection pour une vérification IsDirty ultérieure?instantané de collection pour la comparaison IsDirty
Cheers,
Berryl
Cela dépend de ce que vous voulez.
IEnumerable<T>.ToList
.Exemple:
List<Foo> snapshot = foos.Select(x => new Foo(x)).ToList();
Pour vérifier si deux IEnumerable<T>
s sont égaux (à savoir vérifier qu'il n'y a pas de changement), vous pouvez utiliser SequenceEqual
. Vous devrez également spécifier un IEqualityComparer
si votre classe n'implémente pas Equals comme vous le souhaitez.
Si vous voulez avoir un moyen efficace de trouver un élément spécifique dans l'instantané de son champ id alors au lieu d'une liste que vous pouvez utiliser un Dictionary<K, V>
. Appelez IEnumerable<T>.ToDictionary
pour créer un dictionnaire à partir de votre collection.
Etes-vous en train d'essayer de vérifier la collection ou chaque membre individuel? Une approche consiste à utiliser un ObservableCollection<T>
. Vous pouvez vous abonner aux événements qui sont déclenchés chaque fois que la collection est modifiée. Les arguments d'événement indiquent l'élément et le type de changement.
La collection, par défaut. – Berryl
Si vous voulez juste enregistrer un instantané et vérifier si la taille de votre liste change (article ajouté/supprimé)
var snapshot = new List<Foo>(list);
Toutefois, si vous modifiez les éléments énumérés et que vous souhaitez vérifier si les éléments ont changé, vous devrez cloner chaque élément. Si vous les insérez dans une autre liste, les références devraient rester identiques.
var snapshot = list.Select(item => new Foo
{
Property1 = item.Property1,
... ,
PropertyN = item.PropertyN
});
Si vous voulez juste voir si le nombre de la liste change, vous pouvez utiliser la première version.
Peut-être que vous avez un identifiant sur vos objets qui simplifie la solution à quelque chose comme
var snapshot = list.Select(item => item.Id);
La liste des ID peut être utilisée pour voir si le contenu a changé. Ce modèle serait utile si vos objets sont gros sur l'utilisation de la mémoire, aussi.
Cependant, vous pouvez utiliser un ObservableCollection<T>
qui a des événements à vous informer des modifications. De cette façon, vous pouvez suivre toutes les modifications apportées à la collection (ajouter/supprimer/remplacer).
+1 pour SequenceEqual –