gpt4 book ai didi

c# - 是否可以通过 3rd 方库获取当前正在执行的委托(delegate)(不是 MethodBase/MethodInfo)?

转载 作者:太空宇宙 更新时间:2023-11-03 12:44:33 29 4
gpt4 key购买 nike

我一直在为这个问题绞尽脑汁,但我找不到答案。

我知道 MethodBase.GetCurrentMethod 但我很好奇是否有等效项来获取当前正在执行的 Delegate(如果有一个正在执行,那就是)。

这有可能吗? (编辑:这似乎最终无法通过核心 .NET 实现,所以我想知道是否有第 3 方库可以执行此操作。)

作为引用,我想执行以下操作:

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.
}
}

为什么?至于我为什么要这样做:对于每个引用,我都想关联一些特定于该委托(delegate)的数据(有点像不是显式传入变量的环境数据)。当委托(delegate)执行时,我随后检索该数据(通过 ConditionalWeakTable 或等效查找)并在委托(delegate)中使用它。

最佳答案

您要求的内容在执行时实际上没有意义。委托(delegate)只是指向某物的指针,因此您可以稍后执行它。

您不可能获得上面使用的相同 引用 - 那只是一个您无法访问的局部变量。您可以做的最好的事情(实际上是同一件事)是获取当前对象实例并使用 Delegate.CreateDelegate 创建一个新的 Action .

关于c# - 是否可以通过 3rd 方库获取当前正在执行的委托(delegate)(不是 MethodBase/MethodInfo)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37798718/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com