Я получил этот фрагмент из старого вопроса SO, но не имею идеи, как это реализовано. Я новичок в интерфейсах, так кто-то, пожалуйста, помогите?Метод расширения для перестановок
Я поместил его в статический класс, но я не знаю, как его называть, чтобы он мог генерировать набор перестановок.
public static IEnumerable<IEnumerable<T>> Permutations<T>(this IEnumerable<T> source)
{
if (source == null)
throw new ArgumentNullException("source");
// Ensure that the source IEnumerable is evaluated only once
return permutations(source.ToArray());
}
private static IEnumerable<IEnumerable<T>> permutations<T>(IEnumerable<T> source)
{
var c = source.Count();
if (c == 1)
yield return source;
else
for (int i = 0; i < c; i++)
foreach (var p in permutations(source.Take(i).Concat(source.Skip(i + 1))))
yield return source.Skip(i).Take(1).Concat(p);
}
Вы должны быть более конкретными в вопросе о том, чего вы действительно хотите. Вы хотите знать, как использовать этот метод? Или вы хотите уточнить некоторые детали его (их) внутреннего поведения? Или вы просто не уверены в определениях методов? – Agat
Интерфейс не является сложным. Они содержат только список методов и/или полей. эти поля и методы не содержат никакого кода. Подумайте об этом как о шаблоне. когда вы создаете класс, если вы применяете интерфейс, вам будет предложено ввести в класс эти методы. – Franck