reflection - C# generic list <T> how to get the type of T? -
इस सवाल का पहले से ही एक उत्तर है: < / P>
- 16 उत्तर
मैं एक पर काम कर रहा हूँ प्रतिबिंब परियोजना, और अब मैं फँस गया हूँ अगर मेरे पास "मायक्लस" का कोई ऑब्जेक्ट है जो सूची को पकड़ सकता है तो किसी को भी पता है कि नीचे दिए गए कोड में टाइप कैसे मिलता है यदि संपत्ति myclass.SomList खाली है?
सूची & lt; myclass & gt; MyList = डेटा जनरेटर.गेट क्लासिक (); LbxObjects.ItemsSource = myList; LbxObjects.चुनल परिवर्तित + = lbxObjects_SelectionChanged; निजी शून्य lbxObjects_SelectionChanged (ऑब्जेक्ट प्रेषक, SelectionChangedEventArgs ई) {Reflect (); } प्राइवेट व्हॉयल रिफ्लेक्ट () {foreach (lbx ऑब्जेक्ट्स में प्रापर्टी इन्फो पाई। सेलेक्टेड इटैम। गेटटाइप ()। GetProperties ()) {स्विच (पी। प्रॉपर्टी टाईप। नाम। टू लवर ()) {केस "सूची 1": {// यह काम करता है अगर सूची & lt; T & gt; एक या अधिक तत्व शामिल हैं प्रकार tTemp = GetGenericType (pi.GetValue (lbxObjects.SelectedItem, नल)); // यदि मूल्य शून्य है तो टाइप कैसे प्राप्त करना संभव है? // मुझे सामान्य सूची की उम्मीद के प्रकार के एक नए ऑब्जेक्ट को बनाने में सक्षम होना चाहिए // टाइप प्रकार = pi.getType ?? // सूची के अंदर वर्ग का प्रकार कैसे प्राप्त करें & lt; T & gt ;? टूटना; }}}} निजी प्रकार GetGenericType (वस्तु obj) {यदि (obj! = नल) {प्रकार टी = obj.GetType (); अगर (टी.आईएसजेनररिक टाइप) {प्रकार [] पर = टी। गेटगेनरिकअर्गूमेंट्स (); T = at.First & lt; प्रकार & gt; (); } वापसी टी; } और {वापसी नल; }}
<कोड> प्रकार प्रकार = pi.PropertyType.PropertyType; यदि (type.IsGenericType & amp; Type.GetGenericTypeDefinition () == प्रकार (सूची & lt; & gt;)) {प्रकार आइटम प्रकार = प्रकार। GetGenericArguments () [0]; // इस का उपयोग करें ...}
आम तौर पर, किसी भी IList है & lt समर्थन करने के लिए; टी & gt;
, आप इंटरफेस जांच करने की आवश्यकता:
<कोड> foreach (type.GetInterfaces में टाइप करें interfaceType ()) {if (interfaceType.IsGenericType & amp; & amp; interfaceType.GetGenericTypeDefinition () == typeof (IList & lt; & gt;)) {प्रकार itemtype = type.GetGenericArguments () [0]; // कुछ करो ... ब्रेक; }}
Comments
Post a Comment