C#使用所有可能的组合创建字符串

时间:2016-01-24 11:07:13

标签: c# string

所以我有一个带字符串的方法。该字符串由一个常量值和2个bool,2个常量int以及一个可以是10,20或30的int构成。这将是一个字符串,其中参数由下划线分隔。

示例:

string value = "horse"
string combination1 = value+"_true_false_1_1_20";
dostuff(combination1);

我需要通过

运行每一种可能的组合

如何获取此常量值并通过所有可能组合的方法运行它?

构建字符串:" VALUE_BOOL1_BOOL2_CONSTINT1_CONSTINT2_INT1"

Possibilities
    VALUE = Horse
    BOOL1 = True, False
    BOOL2 = True, False
    CONSTINT1 = 1
    CONSTINT2 = 1,
    INT1 = 10, 20, 30

如何获取预定义的值字符串并创建所有可能的组合并通过doStuff(字符串组合)方法运行它们?

1 个答案:

答案 0 :(得分:4)

您可以使用非常易读的LINQ语句执行此操作,而无需使用循环:

public static List<String> Combis(string value)
{   
  var combis =
    from bool1 in new bool[] {true, false}
    from bool2 in new bool[] {true, false}
    let i1 = 1
    let i2 = 1
    from i3 in new int[] {10, 20, 30}
    select value + "_" + bool1 + "_" + bool2 + "_" + i1 + "_" + i2 + "_" + i3;

  return combis.ToList();
}

编辑:请记住,必须在上述解决方案中创建多个数组,因为the in-clause is evaluated multiple times。您可以将其更改为以下内容以避免这种情况:

public static List<String> Combis(string value)
{
    bool[] bools = new[] {true, false};
    int[] ints = new[] {10, 20, 30};

    var combis =
        from bool1 in bools
        from bool2 in bools
        let i1 = 1
        let i2 = 1
        from i3 in ints
        select value + "_" + bool1 + "_" + bool2 + "_" + i1 + "_" + i2 + "_" + i3;

    return combis.ToList();
}