Avons-nous une méthode «Contains» dans IEnumerable

J’ai une classe dans mon code qui dérive déjà de IEnumerable. Je me demandais s’il était possible d’utiliser une méthode “Contains” sur ses répertoires pour rechercher un élément de cette liste?

Implémentez-vous vraiment le IEnumerable non générique ou le IEnumerable générique IEnumerable ? Si vous pouvez éventuellement implémenter le générique, votre vie deviendra beaucoup plus simple: vous pourrez alors utiliser LINQ to Objects , qui possède en effet une méthode d’extension Contains .

Sinon, vous pourriez potentiellement convertir du générique en générique en utilisant Cast ou OfType , par exemple:

 bool found = nonGeneric.Cast().Contains(targetItem); 

Ce serait bien si vous veniez de mettre en place l’interface générique pour commencer bien 🙂

Non, cette méthode n’existe pas dans l’interface IEnumerable . Il existe une extension method que vous pouvez utiliser.

 using System.Linq; 

et alors:

 IEnumerable foos = new[] { "foo", "bar", "baz" }; bool IsThereABar = foos.Contains("bar"); 
 public static bool Contains(this IEnumerable source, T value) { foreach (var i in source) { if (Equals(i, value)) return true; } return false; } 

Si vous le souhaitez, vous pouvez append un comparateur personnalisé en tant que paramètre. Méthode d’extension Contient.