एक लैम्ब्डा में कैसे पास करें और तरीकों के एक विशेष सेट तक पहुंच प्राप्त करें

मुझे कुछ ऐसा करना है:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

तो मैं एक लैम्बडा अभिव्यक्ति को तर्क के रूप में रखना चाहता हूं और प्रतिनिधि को एक विशेष वर्ग के तरीकों के उपलब्ध सेट को सूचीबद्ध करना है जिसे मैं लैम्ब्डा फ़ंक्शन के साथ इंटेलिजेंस के माध्यम से एक्सेस कर सकता हूं। फिर पारित विधि को कॉल करें।

i.e. commonCmds => commonCmds. {Lists all the methods of a particular class}

और फिर मैं एक तरीका चाहता हूं जो उस कॉल को बनाता है।

मैं इसे उचित विधि हस्ताक्षर नहीं समझ सकता।

अब तक मेरे पास सार्वजनिक शून्य है <�कोड> मेककॉल (एक्शन सेमीडी) {cmd.invoke;} यह स्पष्ट रूप से काम नहीं करता है। मैंने func, अभिव्यक्ति की कोशिश की और इसे समझ नहीं सकता।

सहायता के लिए आपका बहुत - बहुत धन्यवाद!

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

CmdsTwo और CmdsOne स्थिर हो सकता है। हालांकि मैं अपने वर्गों को इस तरह से अपनाना चाहता हूं, क्योंकि इससे मेरा अन्य काम बहुत आसान हो जाएगा।

public void Main(string []args) {
    MyStaticClass.MakeCall(x => x.DoThis);

    MyStaticClass.MakeCallTwo(x => x.DoThisTwo);

    MyStaticClass.MakeCall(x => x.DoThisThree);
}

public static class MyStaticClass{
    public static void MakeCall<???>( ??????)

    public static void MakeCallTwo<???>( ??????)
}

public class Cmds{
    public void DoThis();

    public void DoThisThree();
}

public class CmdsTwo{
    public void DoThisTwo();
}

}

0
जोड़ा संपादित
विचारों: 1
'क्या प्रतिनिधि किसी विशेष वर्ग के तरीकों के उपलब्ध सेट को सूचीबद्ध करता है जिसे मैं एक्सेस कर सकता हूं' समझ में नहीं आता है। क्या आप इंटेलिसेंस के बारे में बात कर रहे हैं?
जोड़ा लेखक leppie, स्रोत
मुझे यकीन नहीं है कि यह स्पष्ट है कि आप क्या पूछ रहे हैं। क्या आप कह रहे हैं क्या आप आईडीई को यह जानना चाहते हैं कि आप अपने MakeCall विधि से किस प्रकार गुजर रहे हैं ताकि इंटेलिजेंस काम करता हो?
जोड़ा लेखक Dan Puzey, स्रोत
उत्तर बहुत अलग हैं, आपको अधिक स्पष्ट करना चाहिए कि किसी विशेष वर्ग के सभी तरीकों की सूची के साथ आपका क्या मतलब है।
जोड़ा लेखक Adriano Repetti, स्रोत

4 उत्तर

तो मुझे मिल गया। एक विस्तार विधि का उपयोग किया। धन्यवाद।

 public static class MyStaticClass{
     public static void MakeCall(Action paramater){
           Helper(new Cmds(), parameter);
      }

      private static void Helper(this Cmds, Action invokeThis) {...}

     public static void MakeCallTwo<???>( ??????)
 }
0
जोड़ा

निकटतम मैं अभी सोच सकता हूं यह है:

commonCmds => commonCmds.GetType().GetMethods()

यह आपको MethodInfo , जो commonCmds के प्रकार के सभी तरीकों का वर्णन करता है। आपको इस तरह के लोगों में से एक को आमंत्रित करना होगा:

object result = someMethodInfo.Invoke(someObjectInstance, new object[] { someParameter });
0
जोड़ा

तुम उसे देख सकते हो

AStaticClass.MakeCall(() => commonCmds.MethodOfAParticularClass)
0
जोड़ा

आपको ए टाइप के साथ एक्शन के सामान्य संस्करण का उपयोग करने की आवश्यकता है।

public void MakeCall(Action cmd) 
{
   cmd.Invoke(...);
}

इस प्रकार का अनुमान लगाया जाता है और इंटेलिजेंस को लात मारना चाहिए।

0
जोड़ा