如何从Action中获取参数?

时间:2015-11-09 14:22:34

标签: c#

我有一个接受带有签名的Action的方法,如:

public void DoSomething(Action code); 

然后我将这种方法称为:

DoSomething(()=> CallSomething("A","B","C"); 

在DoSomething方法中,如何获取参数值?

另一件需要考虑的事情是CallSomething可能具有可选参数,这意味着我不能只将DoSomething的签名更改为 - &gt; Expression<Action>

我需要做的就是获取参数值,我对任何可行的方法感兴趣。

我已经尝试创建一个接受Expression<Action>然后传递Action(From DoSomething)的新方法,但是没有填充参数。

欢迎任何建议。

1 个答案:

答案 0 :(得分:3)

关键是你不想

您的方法接受Action代表。它说“我只想要一些没有参数的东西,并且没有任何价值”。

如果需要将参数传递给函数,可以使用不同的委托,也可以直接将它们作为参数传递。

想想这个没有 lambda的。您有一个具有单个方法的接口,Act不带任何参数并且不返回任何值。

DoSomething(IMyInterface myInterface)
{
  myInterface.Act(); // How do I get the arguments of some method that `Act` calls?
}

这有什么意义吗?您是否希望能够反汇编myInterface中传递的整个实例,找到它的Act方法,查看从那里调用的所有方法并拦截它们的参数?代表很少,但是一个单一方法的界面,其中有一些状态被继承。

如果您需要参数,将它们作为公共接口的一部分。否则,你的抽象没有任何意义,你不应该使用它。没有人强迫你使用lambdas,没有人强迫你传递一个lambda而没有参数,没有人强制你使用特别是Action。它们都是简单的工具 - 如果它们不适合您的任务,不使用它们

更直接地回答您的问题:您可以像其他任何参数一样获得参数。问题是您的操作没有参数