gpt4 book ai didi

c# - 行动委托(delegate)。如何获取调用方法的实例

转载 作者:可可西里 更新时间:2023-11-01 09:07:44 24 4
gpt4 key购买 nike

我有一个 Action,我想知道如何访问调用该方法的实例。

例子:

this.FindInstance(() => this.InstanceOfAClass.Method());
this.FindInstance(() => this.InstanceOfAClass2.Method());
this.FindInstance(() => this.InstanceOfAClass3.Method());



public void FindInstance(Action action)
{
// The action is this.InstanceOfAClass.Method(); and I want to get the "Instance"
// from "action"
}

谢谢

最佳答案

我认为您正在寻找 Delegate.Target属性(property)。

编辑:好的,现在我知道你在做什么了,你需要一个表示 Action 的表达式树。然后你可以找到方法调用的目标作为另一个表达式树,从中构建一个 LambdaExpression,编译并执行它,然后查看结果:

using System;
using System.Linq.Expressions;

class Test
{
static string someValue;

static void Main()
{
someValue = "target value";

DisplayCallTarget(() => someValue.Replace("x", "y"));
}

static void DisplayCallTarget(Expression<Action> action)
{
// TODO: *Lots* of validation
MethodCallExpression call = (MethodCallExpression) action.Body;

LambdaExpression targetOnly = Expression.Lambda(call.Object, null);
Delegate compiled = targetOnly.Compile();
object result = compiled.DynamicInvoke(null);
Console.WriteLine(result);
}
}

请注意,这非常脆弱 - 但它应该适用于简单的情况。

关于c# - 行动委托(delegate)。如何获取调用方法的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5409580/

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