2

我正在尝试 C# 中的表达式树,只是遇到了一些看似简单但也无法通过谷歌搜索的东西。如何创建引用的表达式thisExpression.PropertyOrField(..., "this")抛出异常“'this' 不是类型 [...] 的成员”。

该类Expression有很多方法,但在这种情况下似乎不适用,而且这不是一个搜索友好的问题......

4

2 回答 2

2

看来你需要Expression.Constant()方法。例如,您可以使用如下表达式调用类方法:

class Foo
{
    public void Test()
    {
        var instance = Expression.Constant(this);
        var body = Expression.Call(instance, GetType().GetMethod("ToString"));
        var exp = Expression.Lambda<Func<string>>(body);
        Console.WriteLine(exp.Compile()());
    }
}

或访问实例属性:

class Foo
{
    public string TestProperty
    {
        get { return "It works."; }
    }

    public void Test()
    {
        var instance = Expression.Constant(this);
        var body = Expression.Property(instance, "TestProperty");
        var exp = Expression.Lambda<Func<string>>(body);
        Console.WriteLine(exp.Compile()());
    }
}
于 2012-08-19T11:26:59.470 回答
1

" this",在您的示例代码中,等于.... 您已经拥有对象引用。没有被调用的隐藏成员this或其他东西。

this从概念上讲,仅在实例方法的主体中才有意义。

于 2012-08-19T11:19:08.647 回答