Получение результата Выражения

7
задан LJW 6 December 2009 в 18:53
поделиться

3 ответа

Попробуйте скомпилировать выражение с помощью метода Compile , затем вызовите возвращаемый делегат:

using System;
using System.Linq.Expressions;

class Example
{
    static void Main()
    {
        Expression<Func<Boolean>> expression 
                = () => "MyValue".StartsWith("MyV");
        Func<Boolean> func = expression.Compile();
        Boolean result = func();
    }
}
15
ответ дан 6 December 2019 в 10:51
поделиться

Как упомянул Эндрю, вы должны скомпилировать выражение, прежде чем сможете выполнить Это. Другой вариант - вообще не использовать Expression, что будет выглядеть следующим образом:

Func<Boolean> MyLambda = () => "MyValue".StartsWith("MyV");
var Result = MyLambda();

В этом примере лямбда-выражение компилируется при построении вашего проекта, а не преобразуется в дерево выражений. Если вы не управляете деревьями выражений динамически или не используете библиотеку, которая использует деревья выражений (Linq to Sql, Linq to Entities и т. Д.), Тогда имеет смысл сделать это таким образом.

2
ответ дан 6 December 2019 в 10:51
поделиться

То, как я это сделал, взято отсюда: Пример MSDN

delegate int del(int i);
static void Main(string[] args)
{
    del myDelegate = x => x * x;
    int j = myDelegate(5); //j = 25
}

Также, если вы хотите использовать тип Expression , тогда этот страница: Expression (TDelegate) Class (System.Linq.Expression) имеет следующий пример:

// Lambda expression as executable code.
Func<int, bool> deleg = i => i < 5;
// Invoke the delegate and display the output.
Console.WriteLine("deleg(4) = {0}", deleg(4));

// Lambda expression as data in the form of an expression tree.
System.Linq.Expressions.Expression<Func<int, bool>> expr = i => i < 5;
// Compile the expression tree into executable code.
Func<int, bool> deleg2 = expr.Compile();
// Invoke the method and print the output.
Console.WriteLine("deleg2(4) = {0}", deleg2(4));

/*  This code produces the following output:
    deleg(4) = True
    deleg2(4) = True
*/
1
ответ дан 6 December 2019 в 10:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: