代码比较少主要是递归算法!示例如下: using System; using System.Collections.Generic; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { FindCombination(dic, 2).ForEach(item => Console.WriteLine(item)); Console.ReadKey(); } /// <summary> /// 测试字典 /// </summary> static List<string> dic = new List<string>(new string[] { "A", "B", "C", "D", "E" }); /// <summary> /// 获取指定字典指定条件的所有组合 /// </summary> /// <param name="dictionary">字典内容</param> /// <param name="length">需要构造字符串的长度</param> public static List<string> FindCombination(List<string> dictionary, int length) { return FindCombination(dictionary, length, string.Empty); } /// <summary> /// 获取指定字典指定条件的所有组合 /// </summary> /// <param name="dictionary">字典内容</param> /// <param name="length">需要构造字符串的长度</param> /// <param name="beginValue">开始的字符串,默认为 String.Empty</param> /// <returns></returns> public static List<string> FindCombination(List<string> dictionary, int length, string beginValue) { var ret = new List<string>(); FindCombinationInternal(ret, dictionary, length, beginValue); return ret; } /// <summary> /// 获取指定字典指定条件的所有组合(内部方法) /// </summary> /// <param name="result">结果数组</param> /// <param name="dictionary">字典内容</param> /// <param name="length">需要构造字符串的长度</param> /// <param name="beginValue">开始的字符串,默认为 String.Empty</param> static void FindCombinationInternal(List<string> result, List<string> dictionary, int length, string beginValue) { if (beginValue.Length < length) { foreach (string s in dictionary) FindCombinationInternal(result, dictionary, length, beginValue + s); } else { result.Add(beginValue); } } } }