0

给定以下代码..

public static class Simulate
{
    public static bool Boolean(bool b)
    {
        return b;
    }

}

我想检查表达式是否使用这个静态函数。我想避免字符串类型的反射,以使代码对重构更友好,这就是为什么我要尝试执行以下操作,类似于this。我尝试了以下代码:

protected virtual Expression VisitMethodCall(MethodCallExpression m)
{

    if (m.Method == Simulate.Boolean)

但这不起作用,所以我尝试了这个:

Expression<Action> fb = () => Simulate.Boolean(true);

string booleanName = fb.Body.ToString();

if (m.Method.DeclaringType == typeof(Simulate))
{
     if (m.Method.Name == booleanName)

然而,如预期的那样,上面的代码返回Boolean(true)。但是有什么办法我只能得到布尔字符串吗?

4

1 回答 1

2

您可以MethodInfo从表达式的主体访问,然后访问它的名称,它将返回一个字符串Boolean

Expression<Action> fb = () => Simulate.Boolean(true);

var call = fb.Body as MethodCallExpression;

if (call != null)
    Console.WriteLine (call.Method.Name); //prints "Boolean" as a string
于 2013-03-22T09:49:40.780 回答