Determine via the ternary operator ? if index is 0, if so return value on the left of : else start with flattening elements via SelectMany which leads to Skipping the parameter index which is from a recursive call to Combinations extension then adding combo to the array.
Below I reformatted and changed variable names, the order should be clearer now via code indenting also.
public static class Combination
{
public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int index)
{
return index == 0 ?
new[] { new T[0] } :
elements.SelectMany((element, indexer) =>
elements.Skip(indexer + 1).Combinations(index - 1)
.Select(combo => (new[] { element })
.Concat(combo)));
}
}
Using the debugger to step into code can assist understanding code too.