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


LoopExpression Класс

Определение

Представляет бесконечный цикл. Он может завершаться прерыванием.

public ref class LoopExpression sealed : System::Linq::Expressions::Expression
public sealed class LoopExpression : System.Linq.Expressions.Expression
type LoopExpression = class
    inherit Expression
Public NotInheritable Class LoopExpression
Inherits Expression
Наследование
LoopExpression

Примеры

В следующем примере показано, как создать блочное выражение, содержащее объект , LoopExpression с помощью Loop метода .

// Add the following directive to the file:
// using System.Linq.Expressions;

// Creating a parameter expression.
ParameterExpression value = Expression.Parameter(typeof(int), "value");

// Creating an expression to hold a local variable.
ParameterExpression result = Expression.Parameter(typeof(int), "result");

// Creating a label to jump to from a loop.
LabelTarget label = Expression.Label(typeof(int));

// Creating a method body.
BlockExpression block = Expression.Block(
    new[] { result },
    Expression.Assign(result, Expression.Constant(1)),
        Expression.Loop(
           Expression.IfThenElse(
               Expression.GreaterThan(value, Expression.Constant(1)),
               Expression.MultiplyAssign(result,
                   Expression.PostDecrementAssign(value)),
               Expression.Break(label, result)
           ),
       label
    )
);

// Compile and run an expression tree.
int factorial = Expression.Lambda<Func<int, int>>(block, value).Compile()(5);

Console.WriteLine(factorial);

// This code example produces the following output:
//
// 120
' Add the following directive to the file:
' Imports System.Linq.Expressions  

' Creating a parameter expression.
Dim value As ParameterExpression =
    Expression.Parameter(GetType(Integer), "value")

' Creating an expression to hold a local variable. 
Dim result As ParameterExpression =
    Expression.Parameter(GetType(Integer), "result")

' Creating a label to jump to from a loop.
Dim label As LabelTarget = Expression.Label(GetType(Integer))

' Creating a method body.
Dim block As BlockExpression = Expression.Block(
    New ParameterExpression() {result},
    Expression.Assign(result, Expression.Constant(1)),
    Expression.Loop(
        Expression.IfThenElse(
            Expression.GreaterThan(value, Expression.Constant(1)),
            Expression.MultiplyAssign(result,
                Expression.PostDecrementAssign(value)),
            Expression.Break(label, result)
        ),
        label
    )
)

' Compile an expression tree and return a delegate.
Dim factorial As Integer =
    Expression.Lambda(Of Func(Of Integer, Integer))(block, value).Compile()(5)

Console.WriteLine(factorial)

' This code example produces the following output:
'
' 120

Свойства

Body

Получает объект Expression, являющийся телом цикла.

BreakLabel

Получает объект LabelTarget, который используется телом цикла в качестве целевого выражения оператора break.

CanReduce

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

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

Получает объект LabelTarget, который используется телом цикла в качестве целевого выражения оператора continue.

NodeType

Возвращает тип узла данного выражения. При переопределении этого метода узлы расширения должны возвращать Extension.

Type

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

Методы

Accept(ExpressionVisitor)

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

(Унаследовано от Expression)
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(LabelTarget, LabelTarget, Expression)

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

VisitChildren(ExpressionVisitor)

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

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

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