2009-01-08 42 views
18

Eminim bunu daha önce yaptım, ama bunun bir örneğini bulamıyorum! Grrr ...Genel olmayan bir sınıftaki genel yöntem mi?

Örneğin, ben bir IList<T>BindingList<T> bir dönüştürmek istediğiniz:

public class ListHelper 
{ 
    public static BindingList<T> ToBindingList(IList<T> data) 
    { 
     BindingList<T> output = new BindingList<T>(); 

     foreach (T item in data) 
      output.Add(item); 

     return output; 
    } 
} 
+0

Burada asıl soru nedir? Evet, jenerik yöntemler genel olmayan sınıflarda iyidir (System.Linq.Enumerable muhtemelen en büyük örnek). –

+2

@Jon - ToBindingList –

cevap

31
ToBindingList <T> (...) 

public class ListHelper 
{ 
    public static BindingList<T> ToBindingList<T>(IList<T> data) 
    { 
     BindingList<T> output = new BindingList<T>(); 

     foreach (T item in data) 
     { 
      output.Add(item); 
     } 

     return output; 
    } 
} 
7

Uzatma yöntemi ile yapabilirsiniz ve daha iyi olurdu.

public static class Extensions 
{ 
    public static BindingList<T> ToBindingList<T>(this IList<T> list) 
    { 
     BindingList<T> bindingList = new BindingList<T>(); 

     foreach (var item in list) 
     { 
      bindingList.Add(item); 
     } 

     return bindingList; 
    } 
} 
+0

'da 'u kaçırdı. Bunu yapmamın yolu ... belki de IEnumerable 'dan bile (tüm yapmanız gereken şey foreach) –

+0

Evet, IEnumerable daha iyi olurdu. –

+0

Doğru. –

11

Bu daha basit olmaz mıydı?

public static class Extensions 
{ 
    public static BindingList<T> ToBindingList<T>(this IList<T> list) 
    { 
     return new BindingList<T>(list); 
    } 
} 

Biz bir uzantısı yöntemi gerekmez kadar basit ...

Ben bir şey eksik?

+0

için teşekkürler Teşekkürler, bu daha iyi. –

+0

Bunu neden yapmaya izinlisiniz? BindingList'te bir diziyi argüman olarak alan ve BindingList'i dışarı çıkaran bir kurucu var mı? – CodyBugstein

+0

@Imray bir dizi değil, bir 'IList', ve bir argüman olarak kabul eden bir kurucu var: http://referencesource.microsoft.com/#System/compmod/system/componentmodel/BindingList.cs.4f2405ea796059fa referans çizgisi 65 –

İlgili konular