2009-01-08 25 views
18

मुझे यकीन है कि मैंने पहले यह किया है, लेकिन इसका कोई उदाहरण नहीं मिल रहा है! गरर ...गैर-जेनेरिक वर्ग में जेनेरिक विधि?

उदाहरण के लिए, मैं एक एक BindingList<T> में IList<T> कनवर्ट करना चाहते हैं:

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

यहां वास्तविक प्रश्न क्या है? हां, जेनेरिक तरीके गैर-जेनेरिक वर्गों में ठीक हैं (System.Linq.Numerable शायद सबसे बड़ा उदाहरण है)। –

+2

@ जोन - वह को ToBindingList –

उत्तर

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

आप विस्तार विधि करके ऐसा कर सकते हैं और यह बेहतर होगा।

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

में याद किया गया है, जिस तरह से मैं इसे करूँगा ... शायद आईन्यूमेरेबल (sinc जो भी आप करते हैं) से भी –

+0

हां, IENumerable बेहतर होगा। –

+0

सच है। युक्तियों के लिए धन्यवाद –

11

क्या यह आसान नहीं होगा?

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

यह बहुत आसान है कि हम एक विस्तार विधि की जरूरत नहीं है है ...

मैं कुछ याद आ रही है?

+0

निश्चित रूप से, यह बेहतर है। –

+0

आपको ऐसा करने की अनुमति क्यों है? क्या बाइंडिंगलिस्ट में कोई कन्स्ट्रक्टर है जो तर्क के रूप में सरणी लेता है और इसके बारे में बाइंडिंगलिस्ट बनाता है? – CodyBugstein

+0

@Imray यह एक सरणी नहीं है, यह एक 'IList' है, और एक ऐसा निर्माता है जो इसे तर्क के रूप में स्वीकार करता है: http://referencesource.microsoft.com/#System/compmod/system/componentmodel/BindingList.cs,4f2405ea796059fa , संदर्भ रेखा 65 –

संबंधित मुद्दे