我正在尝试使用C#中的表达式树,并且只是遇到了一些看似简单的东西,但这也是不可谷歌的。如何创建引用this
的表达式? Expression.PropertyOrField(..., "this")
抛出异常“'this'不是[...]类型的成员。”
Expression
类有很多方法,但在这种情况下似乎都不适用,而且这不是一个搜索友好的问题......
答案 0 :(得分: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()());
}
}
答案 1 :(得分:1)
“this
”等于...
。您已经拥有对象引用。没有名为this
的隐藏成员。
this
在概念上仅在实例方法的主体中有意义。