LoopExpression Class
Represents an infinite loop. It can be exited with "break".
Assembly: System.Core (in System.Core.dll)
| Name | Description | |
|---|---|---|
![]() | Body | Gets the Expression that is the body of the loop. |
![]() | BreakLabel | Gets the LabelTarget that is used by the loop body as a break statement target. |
![]() | CanReduce | Indicates that the node can be reduced to a simpler node. If this returns true, Reduce() can be called to produce the reduced form.(Inherited from Expression.) |
![]() | ContinueLabel | Gets the LabelTarget that is used by the loop body as a continue statement target. |
![]() | NodeType | Returns the node type of this expression. Extension nodes should return Extension when overriding this method.(Overrides Expression.NodeType.) |
![]() | Type | Gets the static type of the expression that this Expression represents.(Overrides Expression.Type.) |
| Name | Description | |
|---|---|---|
![]() | Accept(ExpressionVisitor) | Dispatches to the specific visit method for this node type. For example, MethodCallExpression calls the VisitMethodCall.(Inherited from Expression.) |
![]() | Equals(Object) | Determines whether the specified object is equal to the current object.(Inherited from Object.) |
![]() | GetHashCode() | Serves as the default hash function. (Inherited from Object.) |
![]() | GetType() | |
![]() | Reduce() | Reduces this node to a simpler expression. If CanReduce returns true, this should return a valid expression. This method can return another node which itself must be reduced.(Inherited from Expression.) |
![]() | ReduceAndCheck() | Reduces this node to a simpler expression. If CanReduce returns true, this should return a valid expression. This method can return another node which itself must be reduced.(Inherited from Expression.) |
![]() | ReduceExtensions() | Reduces the expression to a known node type (that is not an Extension node) or just returns the expression if it is already a known type.(Inherited from Expression.) |
![]() | ToString() | Returns a textual representation of the Expression.(Inherited from Expression.) |
![]() | Update(LabelTarget, LabelTarget, Expression) | Creates a new expression that is like this one, but using the supplied children. If all of the children are the same, it will return this expression. |
![]() | VisitChildren(ExpressionVisitor) | Reduces the node and then calls the visitor delegate on the reduced expression. The method throws an exception if the node is not reducible.(Inherited from Expression.) |
The following example demonstrates how to create a block expression that contains a LoopExpression object by using the Loop method.
// 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
Available since 8
.NET Framework
Available since 4.0
Portable Class Library
Supported in: portable .NET platforms
Silverlight
Available since 4.0
Windows Phone Silverlight
Available since 8.0
Windows Phone
Available since 8.1
Any public static ( Shared in Visual Basic) members of this type are thread safe. Any instance members are not guaranteed to be thread safe.


