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>
- Наследование
Примеры
В следующем примере кода показано, как представить лямбда-выражение как исполняемый код в виде делегата, так и как данные в виде дерева выражений. Он также демонстрирует, как превратить дерево выражений обратно в исполняемый код с помощью 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) |