C# 引用;这";在表达式树中

C# 引用;这";在表达式树中,c#,expression-trees,C#,Expression Trees,我正在尝试C#中的表达式树,但遇到了一些看似简单但又无法用谷歌搜索的问题。如何创建引用此的表达式Expression.PropertyOrField(…,“this”)引发异常“'this'不是[…]类型的成员” 表达式类有大量的方法,但在这种情况下似乎没有一个适用的方法,而且这不是一个搜索友好的问题……“这个”,在示例代码中,等于…。您已经有了对象引用。没有名为this或其他东西的隐藏成员 从概念上讲,这只在实例方法的主体中才有意义。似乎您需要方法。例如,可以使用如下表达式调用类方法: cla

我正在尝试C#中的表达式树,但遇到了一些看似简单但又无法用谷歌搜索的问题。如何创建引用此的表达式
Expression.PropertyOrField(…,“this”)
引发异常“'this'不是[…]类型的成员”

表达式
类有大量的方法,但在这种情况下似乎没有一个适用的方法,而且这不是一个搜索友好的问题……

这个
”,在示例代码中,等于
。您已经有了对象引用。没有名为this或其他东西的隐藏成员

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

似乎您需要方法。例如,可以使用如下表达式调用类方法:

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
{
公开无效测试()
{
var instance=Expression.Constant(this);
var body=Expression.Call(实例,GetType().GetMethod(“ToString”);
var exp=表达式Lambda(主体);
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()());
    }
}
class-Foo
{
公共字符串TestProperty
{
获取{return“它有效。”;}
}
公开无效测试()
{
var instance=Expression.Constant(this);
var body=Expression.Property(实例,“TestProperty”);
var exp=表达式Lambda(主体);
Console.WriteLine(exp.Compile());
}
}

您可以再分享一些示例代码吗。什么是
,你希望
这个
会是什么?嗯,这有点道理。但是没有办法在MemberExpression中引用对象?@carlpett,现在我明白了!不,不可能。由于.NET4可以在表达式树中使用变量和语句,因此可以先新建对象,然后初始化其成员。