[c#] एक प्रकार तर्क के साथ जेनेरिक विधि को कॉल करना केवल निष्पादन समय पर ज्ञात


0 Answers

Question

संपादित करें:

बेशक मेरा असली कोड बिल्कुल इस तरह दिखता नहीं है। मैंने अर्ध-छद्म कोड लिखने की कोशिश की ताकि मैं इसे और अधिक स्पष्ट कर सकूं।

ऐसा लगता है कि यह बदले में चीजों को गड़बड़ कर देता है।

तो, मैं वास्तव में क्या करना चाहता हूं यह है:

Method<Interface1>();
Method<Interface2>();
Method<Interface3>();
...

खैर ... मैंने सोचा कि शायद मैं प्रतिबिंब का उपयोग कर इसे लूप में बदल सकता हूं। तो सवाल यह है कि मैं इसे कैसे कर सकता हूं। मुझे प्रतिबिंब का बहुत उथला ज्ञान है। तो कोड उदाहरण बहुत अच्छा होगा।

परिदृश्य इस तरह दिखता है:

public void Method<T>() where T : class
{}
public void AnotherMethod()
{
    Assembly assembly = Assembly.GetExecutingAssembly();

    var interfaces = from i in assembly.GetTypes()
    where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
    select i;

    foreach(var i in interfaces)
    {
        Method<i>(); // Get compile error here!
    }



मूल पोस्ट:

नमस्ते!

मैं नामस्थान में सभी इंटरफेस के माध्यम से लूप करने की कोशिश कर रहा हूं और उन्हें इस तरह की सामान्य विधि के लिए तर्क के रूप में भेजता हूं:

public void Method<T>() where T : class
{}
public void AnotherMethod()
{
    Assembly assembly = Assembly.GetExecutingAssembly();

    var interfaces = from i in assembly.GetTypes()
    where i.Namespace == "MyNamespace.Interface" // only interfaces stored here
    select i;

    foreach(var interface in interfaces)
    {
        Method<interface>(); // Get compile error here!
    }
}

मुझे जो त्रुटि मिलती है वह है "टाइप नाम अपेक्षित है, लेकिन स्थानीय चर नाम मिला"। अगर मैं कोशिश करता हूँ

...
    foreach(var interface in interfaces)
    {
        Method<interface.MakeGenericType()>(); // Still get compile error here!
    }
}

मुझे "ऑपरेटर लागू नहीं कर सकता '<' प्रकार 'ऑपरेटिंग समूह' और 'System.Type' के संचालन के लिए" इस समस्या को हल करने के बारे में कोई विचार?




Related