2010-01-12 15 views
22

में मैं इस पर मस्तिष्क मर रहा हूं; विशिष्ट वर्गों (सी 1, सी 2, सी 3 ...) के आधार पर मेरे पास कई सूची 'परिभाषित हैं। मेरे पास एक तरीका है जो इन सूचियों पर जानकारी को संसाधित करेगा। मैं जो करना चाहता हूं वह विशिष्ट सूची में गुजरता है, लेकिन विधि सामान्य सूची को स्वीकार करती है, और फिर टाइपफॉफ़ के माध्यम से निर्धारित करती है कि कौन सा विशिष्ट कार्य करना है। मुझे यह संभव पता है, लेकिन मुझे विधि पक्ष पर सिंटैक्स सही नहीं लगता है। इसलिए, उदाहरण के लिए:एक सामान्य सूची पास करना <> सी #

List<c1> c1var; 
List<c2> c2var; 
List<c3> c3var; 

some_method(c1var); 
some_method(c2var); 
some_method(c3var); 

class some_thing 
some_method(List<> somevar) 
if typeof(somevar).name = x then 
esle if typeof(somevar).name = y then.... 

मैं विधि के लिए पैरामीटर सूची कैसे सेट करूं? अग्रिम आर सैंडर्स में

धन्यवाद

+2

त्वरित प्रश्न, आप टाइप करने के बजाय विशिष्ट प्रकार की सूचियों को स्वीकार करने के लिए कुछ_method क्यों अधिभारित नहीं करेंगे? –

उत्तर

40

आप घोषित करने के लिए some_method, सामान्य होने के साथ ही जरूरत है।

void SomeMethod<T>(List<T> someList) 
{ 
    if (typeof(T) == typeof(c1)) 
    { 
     // etc 
    } 
} 
+0

धन्यवाद ... बस मुझे – RockySanders99

+12

की तरह टाइप करने के लिए सावधानीपूर्वक आवश्यकता है। यह जांच करेगा कि प्रकार पदानुक्रम के सम्मान के बिना बिल्कुल समान हैं। नतीजतन, मेमोरीस्ट्रीम और स्ट्रीम जैसी कुछ चीज़ों का मूल्यांकन उसी प्रकार (टाइपोफ (मेमोरीस्ट्रीम) == टाइपऑफ (स्ट्रीम) को गलत पर मूल्यांकन नहीं करेगा)। यह वांछित हो सकता है, लेकिन यह कुछ पता होना चाहिए। 'है' कीवर्ड का उपयोग करना प्रकारों का मूल्यांकन करने का एक सामान्य तरीका है क्योंकि "मेमोरीस्ट्रीम स्ट्रीम" सत्य का मूल्यांकन करेगा क्योंकि वे एक ही ऑब्जेक्ट पदानुक्रम साझा करते हैं। –

0
पैरामीटर अनुभाग डाल सूची में

तो कोड switch(typeof(T){case typeof(int): break;})

7

typeof (typ1) के उपयोग के साथ सावधान == typeof (typ2) में प्रयास करें। यह जांचने के लिए परीक्षण करेगा कि प्रकार टाइप पदानुक्रम के बराबर हैं या नहीं।

उदाहरण के लिए:

typeof(MemoryStream) == typeof(Stream); // evaluates to false 
new MemoryStream() is Stream; //evalutes to true 

एक बेहतर तरीका है, तो एक वस्तु एक प्रकार की है देखने के लिए जाँच करने के लिए 'है' कीवर्ड का प्रयोग है। एक उदाहरण नीचे दिया गया है:

public static void RunSnippet() 
{ 
    List<c1> m1 = new List<c1>(); 
    List<c2> m2 = new List<c2>(); 
    List<c3> m3 = new List<c3>(); 

    MyMeth(m1); 
    MyMeth(m2); 
    MyMeth(m3); 
} 

public static void MyMeth<T>(List<T> a) 
{ 
    if (a is List<c1>) 
    { 
     WL("c1"); 
    } 
    else if (a is List<c2>) 
    { 
     WL("c2"); 
    } 
    else if (a is List<c3>) 
    { 
     WL("c3"); 
    } 
} 
संबंधित मुद्दे