using System;
using System.Linq;
using System.Collections.Generic;
class Program
{
public static IEnumerable<IEnumerable<T>> Combinations<T>(List<T> list) {
return from n in Enumerable.Range(0, 1 << list.Count)
select
from i in Enumerable.Range(0, list.Count)
where (n & (1 << i)) != 0
select list[i];
}
static void Main() {
var list = new List<int> { 3, 6, 0, 8 };
var result = Combinations(list);
Console.Write(string.Join("\n", result.Select(subset =>
string.Join(", ", subset.Select(r => r.ToString())))));
}
}
/*
run:
3
6
3, 6
0
3, 0
6, 0
3, 6, 0
8
3, 8
6, 8
3, 6, 8
0, 8
3, 0, 8
6, 0, 8
3, 6, 0, 8
*/