Вы можете свернуть свои собственные, используя ключевое слово yield . Вот кое-что, что даст вам похожую функциональность. Вам нужно будет включить это пространство имен, чтобы использовать интерфейс IEnumerable:
using System.Collections;
Вот пример:
public static void Main()
{
string[] myColors = { "red", "green", "blue" };
// this would be your external loop, such as the one building up the table in the RoR example
for (int index = 0; index < 3; index++)
{
foreach (string color in Cycle(myColors))
{
Console.WriteLine("Current color: {0}", color);
}
}
}
public static IEnumerable Cycle<T>(T[] items)
{
foreach (T item in items)
{
yield return item;
}
}
Метод Cycle использует generics в приведенном выше примере кода, чтобы разрешить использование других типов. Например, где объявлено myColors, вы можете использовать:
int[] myInts = { 0, 1, 2, 3 };
bool[] myBools = { true, false };
И в цикле вы могли бы иметь:
foreach (int i in Cycle(myInts))
{
Console.WriteLine("Current int: {0}", i);
}
foreach (bool b in Cycle(myBools))
{
Console.WriteLine("Current bool: {0}", b);
}