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


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>, компилятор выдает инструкции для построения дерева выражений.

Примечание

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

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

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

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

Для NodeType объекта Expression<TDelegate> имеет значение 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

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

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

Получает статичный тип выражения, представленного этим выражением Expression.

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

Методы

Accept(ExpressionVisitor)

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

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

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

Compile(Boolean)

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

Compile(Boolean)

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

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

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

Compile(DebugInfoGenerator)

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

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

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

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

Копирует лямбда-выражение в определение метода и пользовательскую отладочную информацию.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

VisitChildren(ExpressionVisitor)

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

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

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

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