2012-12-07 26 views
7

'da "İçeriyor" yöntemimiz var. Kodumda zaten IEnumerable'dan türeyen bir sınıf var. O listede bir şey aramak için içgüdülerinde "İçerir" yöntemini kullanmanın bir yolu olup olmadığını merak ediyordum?IEnumerable

cevap

15

Eğer gerçekten olmayan jenerik IEnumerable veya jenerik IEnumerable<T> uygulamak mı? Eğer genel olanı uygulayabilirseniz, hayatınız çok daha kolay olacaktır - o zaman Contains uzantı yöntemine sahip olan LINQ to Objects'u kullanabilirsiniz. Aksi takdirde, Cast ya da OfType ya da OfType kullanarak, jenerik olmayandan jenere dönüştürebilirsiniz.

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

sadece istediğiniz varsa, parametre ti uzatma yöntemi olarak özel karşılaştırıcısı ekleyebilir :)

14

Hayır, IEnumerable<T> arabiriminde böyle bir yöntem yoktur. Kullanabiliyor olmanıza rağmen extension method var.

using System.Linq; 

ve sonra:

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

olsa başlamak genel arabirimi hayata Eğer daha hoş olurdu

İçeriyor
İlgili konular