请问一个组合算法的实现有关问题

请教一个组合算法的实现问题
假设我有一组序列,假设为

int[] data = new int[] {1, 2, 3};


我希望得到一个由原始序列构成的所有的组合,但是得到的组合及排序希望是下面这个样子的:
引用
1,2,3
1,2
1,3
1
2,3
2
3


请问如何用C#代码实现,谢谢。
------解决方案--------------------
仅供参考:

static void Main(string[] args)
        {

            string[] outStr=OutputString("ABC");

            foreach(string str in outStr)
            {
                Console.WriteLine(str);
            }

            Console.ReadKey();

        }

        static string[] OutputString(string str)
        {

            if (str == string.Empty)
            {
                return new string[] { string.Empty };
            }

            string[] result = new string[1 << str.Length];

            for (int i = 0; i < 1 << str.Length - 1; i++)
            {
                result[i] = OutputString(str.Remove(0, 1))[i];
            }

 

            for (int i = 1 << str.Length - 1; i < 1 << str.Length; i++)
            {
                result[i] = string.Format("{0}{1}", str[0], OutputString(str.Remove(0, 1))[i - (1 << str.Length - 1)]);
            }

            return result;
        }

 

输出:
C,
B,
BC,
A,
AC,
AB,
ABC