我一直在嘲笑我,但我无法找到答案。
我知道MethodBase.GetCurrentMethod
但是我很好奇是否有等价来获取当前正在执行的Delegate
(如果有一个正在执行,那就是)。
这可能是偶然的吗? (编辑:这似乎无法通过核心.NET实现,所以我想知道是否有第三方库可能会这样做。)
供参考,我想做以下事项:
void Main()
{
var target = new Inner();
var reference = new Action( target.HelloWorld ); // Creates a System.Delegate reference.
reference();
}
class Inner
{
public void HelloWorld()
{
var method = MethodBase.GetCurrentMethod(); // Current method.
var current = DelegateContext.GetCurrentDelegate(); // <==== Magic happens here. Gets "reference" from above.
}
}
为什么?至于为什么我要这样做:对于每个引用,我想关联一些特定于该委托的数据(有点像环境数据,而不是显式的传入变量)。当委托执行时,我然后检索该数据(通过ConditionalWeakTable
或等效查找)并在委托中使用它。
答案 0 :(得分:1)
你要求的东西在执行时实际上没有意义。委托只是指向某个东西的指针,以便您以后可以执行它。
您无法获得上面使用的相同的参考 - 这只是一个您无法访问的本地变量。您可以做的最好(实际上是相同的)是获取当前对象实例并使用Delegate.CreateDelegate创建新的Action
。