using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; class Program { static void Main(string[] args) { var subsets = GetSubsets(new List { 1, 2, 3 }); foreach (var subset in subsets) { foreach (var item in subset) { Console.Write(item + " "); } Console.WriteLine(); } } private static List> GetSubsets(List set) { List> subset = new List>(); subset.Add(new List()); for (int i = 0; i < set.Count; i++) { List> subsetTemp = DeepCopyListOfList(subset); for (int j = 0; j < subsetTemp.Count; j++) { subsetTemp[j].Add(set[i]); } var subsetTempCount = subsetTemp.Count; for (int j = 0; j < subsetTempCount; j++) { subset.Add(new List(subsetTemp[j])); } } return subset; } private static List> DeepCopyListOfList(List> subset) { var ret = new List>(); foreach (var list in subset) { ret.Add(new List(list)); } return ret; } }