如何传入一个lambda并有权访问一组特定的方法

我想要这样的东西:

 AStaticClass.MakeCall(commonCmds => commonCmds.MethodOfAParticularClass)

所以我想要一个lambda表达式作为参数,并且让委托列表可以通过带有lambda函数的intellisense访问的特定类的可用方法集。然后调用传入的方法。

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

然后我想有一个方法来完成这个调用。

我无法弄清楚正确的方法签名。

到目前为止,我有公共无效 MakeCall(Action cmd){cmd.invoke;} 这显然不起作用。我尝试过func,Expression并且无法弄清楚。

十分感谢你的帮助!

编辑:

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
'有代表名单我可以访问的特定类的可用方法集'是没有意义的。你在谈论Intellisense吗?
额外 作者 leppie,
我不清楚你问的是什么。你是说你想让IDE知道你传递给你的 MakeCall 方法的是什么类型,这样intellisense可以工作吗?
额外 作者 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
额外

您需要使用Action With A Type的通用版本。

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

这种类型被推断出来并且智能化应该会被引入。

0
额外