2012-12-07 15 views
7

Ho una classe nel mio codice che è già derivata da IEnumerable. Mi chiedevo se c'è un modo in cui posso usare un metodo "Contiene" sulle sue instnaces per cercare qualcosa in quella lista?Abbiamo un metodo "Contiene" in IEnumerable

risposta

15

Ti davvero attuare il non generico IEnumerable, o il generico IEnumerable<T>? Se è possibile implementare quella generica, la tua vita diventerà molto più semplice - come allora puoi utilizzare LINQ to Objects, che ha effettivamente un metodo di estensione Contains.

In caso contrario, è possibile convertire dal non generico al generico utilizzando Cast o OfType, ad es.

bool found = nonGeneric.Cast<TargetType>().Contains(targetItem); 

Sarebbe bello se appena implementato l'interfaccia generica per cominciare però :)

14

No, non esiste un tale metodo nell'interfaccia IEnumerable<T>. C'è uno extension method che potresti usare.

using System.Linq; 

e poi:

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

Se si desidera, è possibile aggiungere di confronto personalizzato come metodo di parametro di estensione ti Contiene

Problemi correlati