LoopExpression Clase
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Representa un bucle infinito. Puede terminar con "break".
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
- Herencia
Ejemplos
En el ejemplo siguiente se muestra cómo crear una expresión de bloque que contiene un LoopExpression objeto mediante el Loop método .
// 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
Propiedades
Body |
Obtiene la clase Expression, que es el cuerpo del bucle. |
BreakLabel |
Obtiene la clase LabelTarget utilizada por el cuerpo del bucle como destino de la instrucción break. |
CanReduce |
Indica que el nodo se puede reducir a uno más simple. Si devuelve true, se puede llamar a Reduce() para generar el formulario reducido. (Heredado de Expression) |
ContinueLabel |
Obtiene la clase LabelTarget utilizada por el cuerpo del bucle como destino de la instrucción continue. |
NodeType |
Devuelve el tipo de nodo de esta expresión. Los nodos de extensión deben devolver Extension al reemplazar este método. |
Type |
Obtiene el tipo estático de la expresión que Expression representa. |
Métodos
Accept(ExpressionVisitor) |
Envía la expresión al método de visita específico de este tipo de nodo. Por ejemplo, MethodCallExpression llama a VisitMethodCall(MethodCallExpression). (Heredado de Expression) |
Equals(Object) |
Determina si el objeto especificado es igual que el objeto actual. (Heredado de Object) |
GetHashCode() |
Sirve como la función hash predeterminada. (Heredado de Object) |
GetType() |
Obtiene el Type de la instancia actual. (Heredado de Object) |
MemberwiseClone() |
Crea una copia superficial del Object actual. (Heredado de Object) |
Reduce() |
Reduce este nodo a una expresión más simple. Si CanReduce devuelve true, debería devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir a su vez. (Heredado de Expression) |
ReduceAndCheck() |
Reduce este nodo a una expresión más simple. Si CanReduce devuelve true, debería devolver una expresión válida. Este método puede devolver otro nodo que se debe reducir a su vez. (Heredado de Expression) |
ReduceExtensions() |
Reduce la expresión a un tipo de nodo conocido (no es un nodo de extensión) o, si ya es un tipo conocido, solo devuelve la expresión. (Heredado de Expression) |
ToString() |
Devuelve una representación textual de Expression. (Heredado de Expression) |
Update(LabelTarget, LabelTarget, Expression) |
Crea una nueva expresión que es como esta, pero usa el elemento secundario proporcionado. Si todos los elementos secundarios son iguales, devolverá esta expresión. |
VisitChildren(ExpressionVisitor) |
Reduce el nodo y, a continuación, llama al delegado del visitante en la expresión reducida. El método inicia una excepción si el nodo no es reducible. (Heredado de Expression) |