c# - What type is inside a generic container -


  सार्वजनिक टी getValueByName & lt; T & gt; (स्ट्रिंग नाम) {यदि (टी सूची है) ऑब्जेक्ट में निहित प्रकार = टी.WhatGoesHere ()? ...  

उपरोक्त कोड में, मुझे यह जानना होगा कि क्या मैं एक सूची को किसी भी प्रकार की सूची में परिवर्तित कर सकता हूँ, जैसे, सूची & lt; नियंत्रण & gt;

क्या निहित प्रकार के लिए सामान्य पूछताछ करने का कोई तरीका है? मैं सूची & lt; नियंत्रण & gt; , सूची & lt; स्ट्रिंग & gt; , सूची & lt; फ़ॉर्म & gt; आदि प्राप्त कर सकता था।

एपीआई को अलग-अलग तरीके से सूची में वापस करने के लिए विभाजित करता है जहां निहित प्रकार में पारित किया जाता है, इस प्रकार कॉलर को सूचियों के लिए एक विधि का उपयोग करने की आवश्यकता होती है और एक सरल प्रकार के लिए। किसी भी तरह से उन्हें पता चलना है कि क्या वापस आ रहा है, लेकिन अगर मैं जो पूछ रहा हूं, ऐसा करने का एक आसान तरीका है, तो मैं एपीआई को सरल रखता हूं।

ध्यान दें: यह कमी का समाधान है सह-प्रलोभन के कारण, क्योंकि निहित प्रकार पर परिभाषित एक अंतर्निहित रूपांतरण ऑपरेटर भी है, तो सूची टू टी में विफल रहता है। इसलिए, समाधान listOfB.Cast & lt; A & gt; (); , का पालन करने के लिए मुझे पता होना चाहिए कि क्या करना है (ए क्या है)।

धन्यवाद! उदाहरण

आप typeof (T) से शुरू कर सकते हैं System.Type जो T का प्रतिनिधित्व करता है। एक बार आपके पास एक बार, आप यह देख सकते हैं कि यह वास्तव में एक जेनेरिक है और फिर Type.GetGenericArguments () को देखने के लिए कि सामान्य तर्कों का उपयोग किस प्रकार किया गया था। Type.IsGenericType देख सकते हैं। / P>

उदाहरण के लिए, यदि T था सूची & lt; int & gt; IsGenericType होगा true और < कोड> GetGenericArguments () एक तत्व युक्त सरणी वापस करेगा: System.Int32

उदाहरण के लिए, यहां कोड का एक स्निपेट है जिसे मैंने लिखा है कि कोई दिए गए हैं प्रकार (वेरिएबल प्रकार ) कुछ कार्यान्वयन है यदि IEnumerable & lt; T & gt; जहां T ज्ञात नहीं है यह पहली बार देखना है कि यह एक जेनेरिक है, उसके बाद यह तय होता है कि उसके पास केवल एक तर्क है, तर्क तर्क निर्धारित करें और देखें कि क्या यह तर्क दिया गया है कि वह इंटरफ़ेस लागू करता है:

  if (type। IsGenericType) {प्रकार [] genericArguments = प्रकार। GetGenericArguments (); यदि (जेनेरिकअर्जेंट्स। लैंगिल == 1) {प्रकार प्रस्तावितअन्यमेरेबल = टाइपफ (IEnumerable & lt; & gt;)। MakeGenericType (जेनेरिक ऍर्गग्वांस); संदर्भ के लिए, देखें:  

>


Comments

Popular posts from this blog

python - Strange behavior using PyQt4's 'pyqtSlot' decorator before another decorator -

c# - UnhandledExceptionMode.ThrowException for AppDomain.UnhandledException -

c# - Process.Kill() returns access denied -