using System.Collections.Generic;
public static IEnumerable<List<T>> GetPermutations<T>(List<T> items, int count)
for (var index = 0; index < items.Count; index++)
yield return new List<T> { items[index] };
foreach (var result in GetPermutations(items.Skip(index + 1).ToList(), count - 1))
yield return new List<T> { items[index] }
public static IEnumerable<List<T>> GetAllValidCombinations<T>(List<T> items)
return new List<List<T>> {items};
return GetPermutations(items, 2)
.Concat(GetPermutations(items, 3))
return Enumerable.Empty<List<T>>();
public static void Main()
var results = GetAllValidCombinations(new List<int>() {1, 2, 3});
foreach (var result in results)
Console.WriteLine(string.Join(",",result));