遍历所有可能的if语句

时间:2014-11-17 23:56:53

标签: c#

我正在尝试创建一种循环遍历所有可能的if语句的方法。我循环遍历项目列表,我想看看if语句的哪些组合是真的。

所以,当我查看列表中的第一项时,我想查看项是否通过第一个if条件而不是第二个if条件,第二个if条件而不是第一个if条件,第一个和第二个if条件,以及if条件。

这是我正在寻找的,但是我在将for循环与if语句配对时遇到了麻烦。

foreach(var i in items)
{
    for(int if1 = 0; if1 < 1; if1++)
    {
        for(int if2 = 0; if2 < 1; if2++)
        {
            if if1 = 0 and if2 = 0 then check if both if statements are false
            if if1 = 1 and if2 = 0 then check if first if is true and second is false
            if if1 = 0 and if2 = 1 then check if first if is false and second is true
            if if1 = 1 and if2 = 1 then check if first if is true and second if is true
        }
    }
}

这是我想要做的简单版本。最终它会检查几十个if语句的可能性。

1 个答案:

答案 0 :(得分:0)

问题不是很清楚。但如果我理解正确,这样的事情应该有效:

foreach(var i in items)
{
    // Fake conditions for the purpose of example
    bool firstCondition = i.Value1 == 17,
        secondCondition = i.Value2 == 37;

    for(int if1 = 0; if1 < 1; if1++)
    {
        for(int if2 = 0; if2 < 1; if2++)
        {
            bool localCondition1 = if1 == 0 ? !firstCondition : firstCondition,
                localCondition2 = if2 == 0 ? !secondCondition : secondCondition;

            if (localCondition1 && localCondition2)
            {
                // do something
            }
        }
    }
}

以上假设您根据原始条件的条件评估只做一件事。如果你根据条件有不同的事情要做,你可能需要这样的东西:

foreach(var i in items)
{
    // Fake conditions for the purpose of example
    bool firstCondition = i.Value1 == 17,
        secondCondition = i.Value2 == 37;

    for(int if1 = 0; if1 < 1; if1++)
    {
        for(int if2 = 0; if2 < 1; if2++)
        {
            bool localCondition1 = if1 == 0 ? !firstCondition : firstCondition,
                localCondition2 = if2 == 0 ? !secondCondition : secondCondition;

            if (localCondition1 && localCondition2)
            {
                switch (if1 + if2 * 2)
                {
                case 0:
                    // if1 == 0, if2 == 0
                    break;
                case 1:
                    // if1 == 1, if2 == 0
                    break;
                case 2:
                    // if1 == 0, if2 == 0
                    break;
                case 3:
                    // if1 == 1, if2 == 1
                    break;
                }
            }
        }
    }
}

当然,您会将firstConditionsecondCondition的初始化替换为您正在测试的实际条件。

虽然恕我直言,如果你真的只是想测试可能的组合,你应该完全摆脱内部循环,只是明确地写出if语句:

foreach(var i in items)
{
    // Fake conditions for the purpose of example
    bool firstCondition = i.Value1 == 17,
        secondCondition = i.Value2 == 37;

    if (!firstCondition)
        if (!secondCondition)
            // if0 == 0, if1 == 0
        else
            // if0 == 0, if1 == 1
    else
        if (!secondCondition)
            // if0 == 1, if1 == 0
        else
            // if0 == 1, if1 == 1
}

如果这些都没有解决您的问题,您应该更加努力地思考如何表达您的问题,然后编辑问题以使其更易于理解。