我正在尝试创建一种循环遍历所有可能的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语句的可能性。
答案 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;
}
}
}
}
}
当然,您会将firstCondition
和secondCondition
的初始化替换为您正在测试的实际条件。
虽然恕我直言,如果你真的只是想测试可能的组合,你应该完全摆脱内部循环,只是明确地写出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
}
如果这些都没有解决您的问题,您应该更加努力地思考如何表达您的问题,然后编辑问题以使其更易于理解。