私は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
概念的には、インスタンスメソッドの本体でのみ意味があります。