2012-12-07 2 views

답변

15

당신이 정말는 제네릭이 아닌 IEnumerable, 또는 일반 IEnumerable<T>을 구현합니까? 아마도 일반적인 것을 구현할 수 있다면 인생은 훨씬 더 단순해질 것입니다. LINQ to Objects을 사용할 수 있습니다. 실제로는 Contains 확장 방법이 있습니다.

그렇지 않으면 Cast 또는 OfType을 사용하여 비 제너릭에서 일반으로 변환 할 수 있습니다.

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

당신은 당신이 원하는 경우, 당신은 매개 변수 TI의 확장 방법으로 사용자 정의 비교자를 추가 할 수 있습니다 :

14

아니요, 아니요, IEnumerable<T> 인터페이스에는 그러한 방법이 없습니다. 사용할 수 있지만 extension method이 있습니다.

using System.Linq; 

다음 :

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

불구하고 시작하는 일반 인터페이스를 구현 경우가 더 좋은 것은

을 포함합니다
관련 문제