Не понятно что такое IEnumerable<int[]>, yield и foreach
Я нашел код программы которая перебирает сочетания из n по k. Но не могу разобраться в некоторых моментах. В частности мне не понятно что такое IEnumerable<int[]>, yield и foreach. Помогите переделать код так, что бы был использован массив int и цикл for.
P.S. Разъяснить логику работы данной функции тоже не помешало бы)
public class Program
{
public static IEnumerable<int[]> FindCombosRec(int[] buffer, int done, int begin, int end)
{
for (int i = begin; i < end; i++)
{
buffer[done] = i;
if (done == buffer.Length - 1)
yield return buffer;
else
foreach (int[] child in FindCombosRec(buffer, done+1, i+1, end))
yield return child;
}
}
public static IEnumerable<int[]> FindCombinations(int m, int n)
{
return FindCombosRec(new int[m], 0, 0, n);
}
static void Main()
{
foreach (int[] c in FindCombinations(3, 5))
{
for (int i = 0; i < c.Length; i++)
{
Console.Write(c[i] + " ");
}
Console.WriteLine();
}
}
}
Источник: Stack Overflow на русском