我不确定我想做的比较的术语:
if(test1 == true && test2 == true || test2 == true && test3 == true || test3 == true && test4 == true...)
{
//Do stuff
}
是否有有效的方法/功能来实现这一目标?否则我将会有一个非常长的if语句。任何帮助表示赞赏。
答案 0 :(得分:3)
您不必指定==true
部分。它可以写成如下。
if(test1 && test2 || test2 && test3 || test3 && test4...)
{
//Do stuff
}
如果你想简化表达式本身,我建议你研究一下布尔代数和reduction of boolean expressions。
这是AB + BC + CD + ...
形式的表达。您可以执行的一项减少如下。
AB + BC = B(A+C) = B && (A || C)
还可以使用list来存储所有不同的布尔值,并且可以使用它们上的一次迭代来计算它。这有助于提高可读性,同时性能/内存占用几乎不变或仅略微降低。
答案 1 :(得分:3)
var tests = new[] { test1, test2, test3, test4, ... };
for (int i = 0; i < tests.Length - 1; ++i) {
if (tests[i] && tests[i + 1]) {
// Do stuff
break;
}
}
答案 2 :(得分:0)
您可以使用if(test1 && test2 || ...)
或者您可以将其细分为多个步骤
您是否拥有所有单独的变量,或者它们是否在数组/列表中 在后一种情况下,您可以在循环中迭代它们。
bool result = true;
foreach (bool b in boolArray)
{
result = result op b;
}
答案 3 :(得分:0)
您可以简单地消除布尔比较
if( (test1 && test2))
相当于if(test1 == true && test2 == true)
答案 4 :(得分:0)
我能想到的最短的就是:
if((test2 && (test1 || test3)) || (test3 && test4)) {
//Do Stuff
}
答案 5 :(得分:0)
如果你不介意把你的bool放在一个列表中并通过linq使用它
e.g。
bool test1 = true;
bool test2 = true;
bool test3 = true;
bool test4 = true;
List<bool> booList = new List<bool>{test1, test2, test3, test4};
bool isTrue = booList.All(b => b == true); //This will return true
bool test5 = false;
booList.Add(test5);
bool isFalse = booList.All(b => b == true); //This will return false
PS:我不知道与if语句相比会有什么性能
答案 6 :(得分:0)
char test[x]
... test[x] init ...
i=0
res=0
while( i < x-2 )
{
res |= test[i] && test[i+1]
}
答案 7 :(得分:0)
使用C#时,可以使用逻辑处理布尔值。 :)
如果bool1,那么买一些冰淇淋;
如果bool1不存在,那就不要买一些冰淇淋;
将值与0进行比较时,可以使用not运算符(!)。
if(!bool1)MessageBox.Show(“No ice-cream mate”);
与0比较时也是如此,只是不要应用not运算符(!)。
if(bool1)MessageBox.Show(“ice-cream:D”);
很抱歉,如果我把它搞糊涂了。
因此,要添加到其他帖子中,以下内容适合。
if(bool1&amp;&amp; bool2 || bool1&amp;&amp; bool3)MessageBox.Show(“ice-cream!”);
答案 8 :(得分:0)
LINQ方式(假设值在数组中):
bool result = (from index in Enumerable.Range(0, tests.Length - 1)
where tests[index] && tests[index + 1]
select index).Any();
答案 9 :(得分:0)
如果您可以将bool放在列表中
,则会转换为LINQ.ANYList<bool> booList = new List<bool> { true, true, true, true };
bool isTrue = booList.Any(b => b);
Console.WriteLine(isTrue.ToString());
booList = new List<bool> { true, true, false, false };
isTrue = booList.Any(b => b);
Console.WriteLine(isTrue.ToString());
booList = new List<bool> { false, false, false, false };
isTrue = booList.Any(b => b);
Console.WriteLine(isTrue.ToString());