Поделиться через


Expression<TDelegate> Класс

Определение

Представляет строго типизированное лямбда-выражение в виде структуры данных в виде дерева выражений. Этот класс не может быть унаследован.

generic <typename TDelegate>
public ref class Expression sealed : System::Linq::Expressions::LambdaExpression
public sealed class Expression<TDelegate> : System.Linq.Expressions.LambdaExpression
type Expression<'Delegate> = class
    inherit LambdaExpression
Public NotInheritable Class Expression(Of TDelegate)
Inherits LambdaExpression

Параметры типа

TDelegate

Тип делегата, представляющего.Expression<TDelegate>

Наследование
Expression<TDelegate>

Примеры

В следующем примере кода показано, как представить лямбда-выражение как исполняемый код в виде делегата, так и как данные в виде дерева выражений. Он также демонстрирует, как превратить дерево выражений обратно в исполняемый код с помощью Compile метода.


// 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
*/

' Lambda expression as executable code.
Dim deleg As Func(Of Integer, Boolean) = Function(ByVal i) i < 5
' Invoke the delegate and display the output.
MsgBox(String.Format("deleg(4) = {0}", deleg(4)))

' Lambda expression as data in the form of an expression tree.
Dim expr As System.Linq.Expressions.Expression(Of Func(Of Integer, Boolean)) = Function(ByVal i) i < 5
' Compile the expression tree into executable code.
Dim deleg2 As Func(Of Integer, Boolean) = expr.Compile()
' Invoke the method and print the output.
MsgBox(String.Format("deleg2(4) = {0}", deleg2(4)))

' This code produces the following output:
'
' deleg(4) = True
' deleg2(4) = True

Комментарии

Если лямбда-выражение назначается переменной, полю или параметру, тип которого является Expression<TDelegate>, компилятор выдает инструкции по созданию дерева выражений.

Note

Преобразование из лямбда-выражения в тип Expression<D> (Expression(Of D) в Visual Basic) существует, если преобразование из лямбда-выражения в делегат типа D существует. Однако преобразование может завершиться ошибкой, например, если текст лямбда-выражения является блоком. Это означает, что деревья делегатов и выражений ведут себя аналогично в отношении разрешения перегрузки.

Дерево выражений — это представление данных в памяти лямбда-выражения. Дерево выражений делает структуру лямбда-выражения прозрачным и явным. Вы можете взаимодействовать с данными в дереве выражений так же, как и с любой другой структурой данных.

Возможность обрабатывать выражения как структуры данных позволяет API получать пользовательский код в формате, который можно проверять, преобразовывать и обрабатывать в пользовательском режиме. Например, реализация доступа к данным LINQ to SQL использует это средство для перевода деревьев выражений в Transact-SQL инструкции, которые можно оценить базой данных.

Многие стандартные операторы запросов, определенные в Queryable классе, имеют один или несколько параметров типа Expression<TDelegate>.

Expression<TDelegate> Имеет NodeType значение Lambda.

Lambda<TDelegate>(Expression, IEnumerable<ParameterExpression>) Используйте метод или Lambda<TDelegate>(Expression, ParameterExpression[]) метод для создания Expression<TDelegate> объекта.

Свойства

Имя Описание
Body

Получает тело лямбда-выражения.

(Унаследовано от LambdaExpression)
CanReduce

Указывает, что узел может быть сокращен до более простого узла. Если это возвращает значение true, можно вызвать reduce() для создания сокращенной формы.

(Унаследовано от Expression)
Name

Возвращает имя лямбда-выражения.

(Унаследовано от LambdaExpression)
NodeType

Возвращает тип узла этого Expressionтипа.

(Унаследовано от LambdaExpression)
Parameters

Возвращает параметры лямбда-выражения.

(Унаследовано от LambdaExpression)
ReturnType

Возвращает возвращаемый тип лямбда-выражения.

(Унаследовано от LambdaExpression)
TailCall

Возвращает значение, указывающее, будет ли лямбда-выражение компилироваться с оптимизацией хвостового вызова.

(Унаследовано от LambdaExpression)
Type

Возвращает статический тип выражения, представляющего это Expression выражение.

(Унаследовано от LambdaExpression)

Методы

Имя Описание
Accept(ExpressionVisitor)

Отправляется в конкретный метод посещения для этого типа узла. Например, MethodCallExpression вызывает объект VisitMethodCall(MethodCallExpression).

(Унаследовано от Expression)
Compile()

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

Compile(Boolean)

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

Compile(DebugInfoGenerator)

Создает делегат, представляющий лямбда-выражение.

CompileToMethod(MethodBuilder, DebugInfoGenerator)

Компилирует лямбда-код в определение метода и пользовательские сведения отладки.

(Унаследовано от LambdaExpression)
CompileToMethod(MethodBuilder)

Компилирует лямбда-код в определение метода.

(Унаследовано от LambdaExpression)
Equals(Object)

Определяет, равен ли указанный объект текущему объекту.

(Унаследовано от Object)
GetHashCode()

Служит хэш-функцией по умолчанию.

(Унаследовано от Object)
GetType()

Возвращает Type текущего экземпляра.

(Унаследовано от Object)
MemberwiseClone()

Создает неглубокую копию текущей Object.

(Унаследовано от Object)
Reduce()

Сокращает этот узел до более простого выражения. Если CanReduce возвращает значение true, это должно возвращать допустимое выражение. Этот метод может возвращать другой узел, который должен быть сокращен.

(Унаследовано от Expression)
ReduceAndCheck()

Сокращает этот узел до более простого выражения. Если CanReduce возвращает значение true, это должно возвращать допустимое выражение. Этот метод может возвращать другой узел, который должен быть сокращен.

(Унаследовано от Expression)
ReduceExtensions()

Уменьшает выражение до известного типа узла (который не является узлом расширения) или просто возвращает выражение, если оно уже известного типа.

(Унаследовано от Expression)
ToString()

Возвращает текстовое представление Expressionобъекта .

(Унаследовано от Expression)
Update(Expression, IEnumerable<ParameterExpression>)

Создает новое выражение, аналогичное этому, но используя предоставленные дочерние элементы. Если все дочерние элементы одинаковы, он вернет это выражение.

VisitChildren(ExpressionVisitor)

Уменьшает узел, а затем вызывает делегат посетителя в сокращенном выражении. Метод создает исключение, если узел не является редуцируемым.

(Унаследовано от Expression)

Применяется к

См. также раздел