2009-04-17 19 views
5

मैं उत्पादन के लिए कोशिश कर रहा हूँ प्रतिबिंब के माध्यम से एक वस्तु ग्राफ। इसमें कई सामान्य प्रकार (सूचियां, शब्दकोश) हैं। मैं उन प्रकारों (स्ट्रिंग, ऑब्जेक्ट, इत्यादि) को नहीं जानता हूं लेकिन उन्हें सूचीबद्ध करना चाहता हूं (.ToString() का उपयोग करके)।जेनेरिक सूची/शब्दकोश

तो, जेनेरिक तरीके से जेनेरिक सूची/शब्दकोश आउटपुट करने का कोई तरीका है, जिसका अर्थ है प्रत्येक कुंजी < -> मूल्य संयोजन के लिए अधिभारित कार्यों को लिखने के बिना?

मुझे लगता है कि यह .NET 4.0 के साथ संभव हो जाएगा, लेकिन यह है कि वर्तमान में अभी तक यहाँ आप प्रतिबिंब का उपयोग कर रहे हैं, तो जेनरिक बहुत मुश्किल हो जाता है नहीं है ..

+0

@Brian - वास्तव में, नहीं। –

+0

मुझे आश्चर्य है कि क्या var कीवर्ड इस के साथ मदद कर सकता है। मुझे संदेह नहीं है। – Brian

उत्तर

4

। क्या आप बस गैर-जेनेरिक इंटरफेस का उपयोग कर सकते हैं? IDictionary/IList? यह हो सकता है एक बहुत आसान ... कुछ की तरह:

static void Write(object obj) { 
    if (obj == null) { } 
    else if (obj is IDictionary) { Write((IDictionary)obj); } 
    else if (obj is IList) { Write((IList)obj); } 
    else { Console.WriteLine(obj); } 
} 
static void Write(IList data) { 
    foreach (object obj in data) { 
     Console.WriteLine(obj); 
    } 
} 
static void Write(IDictionary data) { 
    foreach (DictionaryEntry entry in data) { 
     Console.WriteLine(entry.Key + "=" + entry.Value); 
    } 
} 
+0

सोचने का एक क्लासिक मामला बहुत जटिल है। एक सामान्य सूची IList को असाइन करने योग्य है, इसलिए मुझे यह पता लगाने की आवश्यकता है कि यह एक सूची या शब्दकोश है या नहीं। धन्यवाद। – Sascha

+0

वास्तव में, न तो स्वचालित रूप से परिवर्तनीय है; यह सच नहीं है कि IList : IList, IDIS नहीं: IDictionary - लेकिन अधिकांश कार्यान्वयन दोनों प्रदान करते हैं। –