जब मैं वर्तमान AppDomain में सभी प्रकार की सूची बनाना, मैं सामान्य प्लेसहोल्डर के साथ मेरी सामान्य प्रकार देख से बनाया गया है प्रकार के बंद कर दिया। हालांकि, अगर मैं अपने जेनेरिक प्रकारों को एक प्रकार के साथ चालू करता हूं और फिर ऐपडोमेन में सभी प्रकार की सूची देता हूं, तो मुझे नए बनाए गए बंद प्रकार दिखाई नहीं देते हैं।सूची है जो रनटाइम खुला सामान्य प्रकार
नीचे दिए गए उदाहरण में, उत्पादन केवल है:
Foo`1[T]
मैं बंद प्रकार के लिए देख रहा हूँ:
Foo`1[System.Int32]
वहाँ बंद प्रकार क्रम है कि देखने के लिए एक रास्ता है मेरे खुले जेनेरिक प्रकारों के आधार पर मेरे लिए बनाया गया है?
class Foo<T>
{
}
class Program
{
static void Main(string[] args)
{
var tmp = new Foo<int>();
ListTypes();
}
private static void ListTypes()
{
var types = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.Name.Contains("Foo")
select type;
foreach (var type in types)
Console.WriteLine(type.ToString());
}
}
मैंने बंद प्रकार की खोज की उम्मीद में सामान्य तर्क से सभी प्रकारों को खोजने का भी प्रयास किया है।
class Foo<T>
{
}
class Bar
{
}
class Program
{
static void Main(string[] args)
{
var tmp = new Foo<Bar>();
ListTypes();
}
private static void ListTypes()
{
var types = from assembly in AppDomain.CurrentDomain.GetAssemblies()
from type in assembly.GetTypes()
where type.IsGenericType
&& type.GetGenericArguments().Contains(typeof(Bar))
select type;
foreach (var type in types)
Console.WriteLine(type.ToString());
}
}
यह मेरी जिज्ञासा को पूरा करने के लिए है।
यदि मैं सही ढंग से समझता हूं, तो यह प्रतिबिंब केवल मेटाडेटा में परिभाषित प्रकार प्राप्त करेगा, जिसमें आपके मामले में सामान्य प्रकार की परिभाषा शामिल है। चूंकि विशिष्ट प्रकारों को जेनेरिक प्रकारों से गतिशील रूप से रनटाइम पर बनाया जा सकता है (फिर से सामान्य तर्कों में गुजरने के प्रतिबिंब का उपयोग करके) - आप देख सकते हैं कि मेटाडेटा में उन्हें डालने का कोई तरीका नहीं है ... इसलिए, कुछ अन्य तंत्र (नहीं मेटाडाटा एक्सप्लोरेशन) को बनाए गए विशिष्ट प्रकारों को खोजने के लिए उपयोग किया जाना चाहिए। –
मैं देखता हूं। यह बताता है कि मैं रनटाइम पर बनाए गए प्रकारों को क्यों नहीं देख सकता, वे मेटाडेटा में नहीं हैं कि प्रतिबिंब पूछताछ कर रहा है। मुझे आश्चर्य है कि वह अन्य तंत्र क्या होगा? –
टाइपस्मेपर्स नामक mscorlib के अंदर एक निजी प्रकार है जिसमें स्ट्रिंग्स की एक सरणी लौटने वाली गेटनेम विधि है, लेकिन जब मैं प्रतिबिंब के तहत इसका उपयोग करने की कोशिश कर रहा हूं तो मुझे गंभीर याद आ रही है कि मुझे COM ऑब्जेक्ट्स और इंटरऑप के बारे में कितना पता है, और आम तौर पर मुझे mscorlib के अंदर निजी प्रकार के साथ गड़बड़ नहीं करना चाहिए :-P फिर भी एक सुरुचिपूर्ण समाधान की तलाश में है। –