Yield Keyword C# with IEnumerable
18/01/2010 Leave a comment
Used in an iterator block to provide a value to the enumerator object or to signal the end of iteration.
expression is evaluated and returned as a value to the enumerator object; expressionhas to be implicitly convertible to the yield type of the iterator.
The yield statement can only appear inside an iterator block, which might be used as a 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 statement cannot appear in an anonymous method. For more information, seeAnonymous Methods (C# Programming Guide).
When used with expression, a yield return statement cannot appear in a catch block or in a try block that has one or more catch clauses. For more information, seeException Handling Statements (C# Reference).
using System;
using System.Collections.Generic;
public class MyClass
{
public static IEnumerable<int> Powers(int from,int to)
{
for (int i = from; i <= to; ++i)
{
yield return (int)Math.Pow(2, i);
}
}
static void Main()
{
IEnumerable<int> powers = Powers(0, 16);
foreach (int result in powers)
{
Console.WriteLine(result);
}
}
}
Source :MSDN