遍历所有可能的 if 语句

本文关键字:if 语句 有可能 遍历 | 更新日期: 2023-09-27 18:30:39

我正在尝试创建一种方法来循环遍历所有可能的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语句的可能性。

遍历所有可能的 if 语句

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

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
}

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