Aracılığıyla paylaş


Nasıl yapılır: yürütme ifade ağaçları (C# ve Visual Basic)

Bu konuda nasıl bir ifade ağaç çalıştırılacağını gösterir.Bir ifade ağaç yürütme değeri döndürebilir veya yalnızca bir yöntemi çağırmak gibi bir eylem gerçekleştirebilir.

Lambda ifadeleri temsil eden ifade ağaçları çalıştırılabilir.Lambda ifadeleri temsil eden ifade ağaçları türündedir LambdaExpression veya Expression<TDelegate>.Bu ifade ağaçları yürütmek için çağrı Compile yürütülebilir bir temsilci oluşturmak ve temsilciyi çağırmak için yöntem.

[!NOT]

Temsilci türü bilinmiyor, diğer bir deyişle, lambda ifade türü ise LambdaExpression ve Expression<TDelegate>, çağırması gerekir DynamicInvoke doğrudan çağırmak yerine temsilci yöntemi.

Lambda ifade ifade ağaç göstermiyor, özgün ifade ağaç, gövde metni olarak çağırarak sahip yeni lambda ifadesi oluşturabilirsiniz Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) yöntemi.Daha sonra bu bölümde daha önce açıklandığı gibi lambda ifade yürütebilirsiniz.

Örnek

Aşağıdaki kod örneği, lambda ifadesi ve yürüterek bir sayıyı bir kuvvete yükseltme temsil eden bir ifade ağaç yürütme gösterilmiştir.Sayının logaritmasının gücünü temsil eden, sonuç görüntülenir.

        ' The expression tree to execute.
        Dim be As BinaryExpression = Expression.Power(Expression.Constant(2.0R), Expression.Constant(3.0R))

        ' Create a lambda expression.
        Dim le As Expression(Of Func(Of Double)) = Expression.Lambda(Of Func(Of Double))(be)

        ' Compile the lambda expression.
        Dim compiledExpression As Func(Of Double) = le.Compile()

        ' Execute the lambda expression.
        Dim result As Double = compiledExpression()

        ' Display the result.
        MsgBox(result)

        ' This code produces the following output:
        ' 8

            // The expression tree to execute.
            BinaryExpression be = Expression.Power(Expression.Constant(2D), Expression.Constant(3D));

            // Create a lambda expression.
            Expression<Func<double>> le = Expression.Lambda<Func<double>>(be);

            // Compile the lambda expression.
            Func<double> compiledExpression = le.Compile();

            // Execute the lambda expression.
            double result = compiledExpression();

            // Display the result.
            Console.WriteLine(result);

            // This code produces the following output:
            // 8

Kod Derleniyor

  • Zaten başvurulmayan System.Core.dll proje başvurusu ekleyin.

  • System.Linq.Expressions ad alanı içerir.

Ayrıca bkz.

Görevler

Nasıl yapılır: deyim ağaçları (C# ve Visual Basic) değiştirme

Kavramlar

İfade ağaçları (C# ve Visual Basic)