【发布时间】:2015-11-09 14:22:33
【问题描述】:
我有一个方法可以接受带有如下签名的动作:
public void DoSomething(Action code);
那么我会这样称呼这个方法:
DoSomething(()=> CallSomething("A","B","C");
在 DoSomething 方法中,如何获取参数值?
要考虑的另一件事是 CallSomething 可能具有可选参数,这意味着我不能只将 DoSomething 的签名更改为 -> Expression<Action>
我需要做的就是获取参数值,我对任何可行的方法都感兴趣。
我已经尝试创建一个接受Expression<Action> 的新方法,然后通过(来自 DoSomething)传递操作,但没有填充参数。
欢迎提出任何建议。
【问题讨论】:
-
我认为这不会很简单,因为在
DoSomething函数中,code只是某种函数指针;你并不总是知道它是一个调用另一个函数的 lambda。我觉得你必须使用反射来反汇编 lambda 并查找函数调用,但即便如此你也在做一些相当恶心的事情。 -
为什么?你想做什么,为什么你认为采用
Action(或Expression<Action>)的方法是这样做的?为什么Expression<Action>会阻止您使用可选参数?
标签: c#