Comment passer dans un lambda et avoir accès à un ensemble particulier de méthodes

Je veux avoir quelque chose comme:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

Donc, je veux avoir une expression lambda comme argument et avoir la liste des délégués l'ensemble disponible de méthodes d'une classe particulière que je peux accéder via intellisense avec la fonction lambda. Puis appelez la méthode passée.

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

et puis je veux avoir une méthode qui fait cet appel.

Je ne peux pas comprendre la signature de la méthode appropriée.

Jusqu'à présent j'ai public MakeCall (Action cmd) {cmd.invoke;} Cela ne fonctionne évidemment pas. J'ai essayé func, Expression et ne peux pas le comprendre.

Merci beaucoup pour l'aide!

MODIFIER:

CmdsTwo et CmdsOne Peut être statique. Cependant, j'aimerais que mes cours soient de cette façon, car cela rendra beaucoup plus facile mon autre travail.

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
'avoir la liste des délégués l'ensemble disponible de méthodes d'une classe particulière que je peux accéder' n'a pas de sens. Parlez-vous d'Intellisense?
ajouté l'auteur leppie, source
Je ne suis pas sûr que ce que vous demandez soit clair. Voulez-vous que l'EDI connaisse le type que vous transmettez à votre méthode MakeCall pour qu'intellisense fonctionne?
ajouté l'auteur Dan Puzey, source
Les réponses sont assez différentes, vous devriez clarifier ce que vous voulez dire par lister toutes les méthodes d'une classe particulière .
ajouté l'auteur Adriano Repetti, source

4 Réponses

Donc je l'ai eu. J'ai utilisé une méthode d'extension. Je vous remercie.

 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
ajouté

Le plus proche que je peux penser en ce moment est la suivante:

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

Cela vous renvoie un tableau de MethodInfo , qui décrivent toutes les méthodes du type de commonCmds . Vous devriez invoquer l'un de ceux-ci comme ceci:

object result = someMethodInfo.Invoke(someObjectInstance, new object[] { someParameter });
0
ajouté

Tu peux le vérifier

AStaticClass.MakeCall(() => commonCmds.MethodOfAParticularClass)
0
ajouté

Vous devez utiliser la version générique de Action With A Type.

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

Le type est inféré et l'intellisense devrait intervenir.

0
ajouté