Cum să treci într-o lambda și să ai acces la un anumit set de metode

Vreau să am ceva de genul:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

Deci, vreau să am o expresie lambda ca argument și să am lista de delegați setul de metode disponibile pentru o anumită clasă pe care le pot accesa prin intellisense cu funcția lambda. Apoi, apelați metoda introdusă.

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

și apoi vreau să am o metodă care să facă acest apel.

Nu-mi dau seama de semnătura metodei potrivite.

Până în prezent am public void MakeCall (Action cmd) {cmd.invoke;} Asta evident că nu funcționează. Am încercat func, expresie și nu pot să-mi dau seama.

Vă mulțumesc foarte mult pentru ajutor!

EDITAȚI | ×:

CmdsTwo și CmdsOne Poate fi static. Cu toate acestea, aș dori să mă înscriu în acest fel, deoarece va face foarte mult munca mea mult mai ușoară.

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
"au lista de delegați setul de metode disponibile pentru o anumită clasă pe care am acces" nu are sens. Vorbești despre Intellisense?
adăugat autor leppie, sursa
Nu sunt sigur că este clar ce cereți. Vrei să spui că IDE-ul știe ce tip ai trece la metoda MakeCall , astfel încât intellisense funcționează?
adăugat autor Dan Puzey, sursa
Răspunsurile sunt destul de diferite, ar trebui să clarificați ce înțelegeți cu listați toate metodele unei anumite clase .
adăugat autor Adriano Repetti, sursa

4 răspunsuri

Așa că am reușit. A folosit o metodă de extensie. Mulțumesc.

 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
adăugat

Cel mai apropiat lucru pe care îl pot gândi acum este:

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

Aceasta vă întoarce o serie de MethodInfo , care descriu toate metodele de tipul commonCmds . Va trebui să invocați unul dintre aceștia:

object result = someMethodInfo.Invoke(someObjectInstance, new object[] { someParameter });
0
adăugat

Puteți să-l verificați

AStaticClass.MakeCall(() => commonCmds.MethodOfAParticularClass)
0
adăugat

Trebuie să utilizați versiunea generică a acțiunii cu un tip.

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

Tipul devine dedus și intellisense ar trebui să-l lovească.

0
adăugat