Comment implémenter IEnumerable?

J’ai une classe qui contient un nombre statique d’objects. Cette classe doit être fréquemment “comparée” à d’autres classes qui seront de simples objects List.

public partial class Sheet { public Item X{ get; set; } public Item Y{ get; set; } public Item Z{ get; set; } } 

les articles ne vont évidemment pas être “X” “Y” “Z”, ce ne sont que des noms génériques par exemple. Le problème est qu’en raison de la nature de ce qui doit être fait, une liste ne fonctionnera pas; même si tout ici sera de type Item. C’est comme une liste de contrôle de choses très spécifiques contre lesquelles il faut tester à la fois le code et l’exécution.

Cela fonctionne très bien. ce n’est pas mon problème. Mon problème est itératif. Par exemple, je veux faire ce qui suit …

 List UncheckedItems = // Repository Logic Here. 

UncheckedItems contient tous les éléments disponibles. et CheckedItems est l’instance de la classe Sheet. CheckedItems contient les éléments qui ont été déplacés de non cochés à cochés; Cependant, en raison de la nature du système de stockage, les éléments déplacés à Checked NE PEUVENT PAS ÊTRE SUPPRIMÉS de Unchecked. Je veux simplement parcourir «coché» et supprimer tout élément de la liste non coché qui se trouve déjà dans «coché».

Alors, naturellement, cela irait comme ceci avec une liste normale.

 foreach(Item item in Unchecked) { if( Checked.Contains(item) ) Unchecked.Remove( item ); } 

Mais puisque “Feuille” n’est pas une “liste”, je ne peux pas le faire. J’ai donc voulu implémenter IEnumerable pour pouvoir le faire. Aucune suggestion? Je n’ai jamais implémenté IEnumerable directement auparavant et je ne sais trop par où commencer.

Vous devez créer un iterator qui renvoie les éléments résidant dans la feuille.

Utiliser les iterators

 public partial class Sheet { public Item X{ get; set; } public Item Y{ get; set; } public Item Z{ get; set; } public IEnumerable EnumerateItems() { yield return X; yield return Y; yield return Z; // ... } } 

Si vous ne voulez pas avoir à appeler la méthode, vous pouvez le faire.

 public partial class Sheet : IEnumerable { public Item X{ get; set; } public Item Y{ get; set; } public Item Z{ get; set; } public IEnumerator GetEnumerator() { yield return X; yield return Y; yield return Z; // ... } IEnumerator IEnumerator.GetEnumerator() { return GetEnumerator(); } }