2012-12-07 11 views
7

Mam klasy w moim kodu, który jest już pochodzących od IEnumerable. Zastanawiam się, czy istnieje sposób, że mogę użyć metody "Zawiera" w swoich instancjach, aby wyszukać coś na tej liście?Czy mamy metodę "Zawiera" w IEnumerable

Odpowiedz

15

Czy naprawdę wdrożyć nierodzajową IEnumerable lub rodzajowego IEnumerable<T>? Jeśli możesz wdrożyć wersję ogólną, twoje życie stanie się znacznie prostsze - wtedy możesz użyć LINQ to Objects, która rzeczywiście ma metodę rozszerzenia Contains.

W przeciwnym razie można potencjalnie przekonwertować z nie generycznego na ogólny za pomocą Cast lub, np.

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

Byłoby ładniej, jeśli tylko wdrożył rodzajowy interfejs na początek choć :)

14

Nie, takiej metody nie ma w interfejsie IEnumerable<T>. Jest taki, że możesz go użyć.

using System.Linq; 

, a następnie:

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; 
    } 

Jeśli chcesz, możesz dodać niestandardową porównywarka jako parametr metody wydłużania ti Zawiera

Powiązane problemy