- yield return <expression>;
- yield break;
The yield keyword signals to the compiler that the method in which it appears is an iterator block. The compiler generates a class to implement the behavior that is expressed in the iterator block. In the iterator block, the yield keyword is used together with the return keyword to provide a value to the enumerator object. This is the value that is returned, for example, in each loop of a foreach statement. The yield keyword is also used with break to signal the end of iteration.
- public static System.Collections.IEnumerable Power(int number, int exponent)
- int counter = 0;
- int result = 1;
- while (counter++ < exponent)
- result = result * number;
- yield return result;
- In a yield break statement, control is unconditionally returned to the caller of the iterator, which is either the IEnumerator.MoveNext method (or its genericSystem.Collections.Generic.IEnumerable<T> counterpart) or the Dispose method of the enumerator object.
- The yield statement can only appear inside an iterator block, which can be implemented as the body of a method, operator, or accessor. The body of such methods, operators, or accessors is controlled by the following restrictions:Unsafe blocks are not allowed.Parameters to the method, operator, or accessor cannot be ref or out.
A yield return
statement cannot be located anywhere inside a try-catch block. It can be located in a try block if the try block is followed by a finally block.A yield break statement may be located in a try block or a catch block but not a finally block.A yield statement cannot appear in an anonymous method.