我正在尝试 C# 中的表达式树,只是遇到了一些看似简单但也无法通过谷歌搜索的东西。如何创建引用的表达式this
?Expression.PropertyOrField(..., "this")
抛出异常“'this' 不是类型 [...] 的成员”。
该类Expression
有很多方法,但在这种情况下似乎不适用,而且这不是一个搜索友好的问题......
我正在尝试 C# 中的表达式树,只是遇到了一些看似简单但也无法通过谷歌搜索的东西。如何创建引用的表达式this
?Expression.PropertyOrField(..., "this")
抛出异常“'this' 不是类型 [...] 的成员”。
该类Expression
有很多方法,但在这种情况下似乎不适用,而且这不是一个搜索友好的问题......
看来你需要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()());
}
}
" this
",在您的示例代码中,等于...
. 您已经拥有对象引用。没有被调用的隐藏成员this
或其他东西。
this
从概念上讲,仅在实例方法的主体中才有意义。