2

私はC#で式ツリーを試していますが、単純に見えるもので行き詰まりましたが、これもグーグルできません。参照する式を作成するにはどうすればよいthisですか?Expression.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 に答える