我在使用array.All<>
功能时遇到了困难。
private bool noBricksLeft() {
bool[] dead = new bool[brick.Length];
for (int i = 0; i < brick.GetLength(0); i++) {
if (brickLocation[i, 2] == 0)
dead[i] = true;
else
continue; // move onto the next brick
}
if (dead.All(dead[] == true)) // IF ALL OF THE ELEMENTS ARE TRUE
return true;
else
return false;
}
我想知道如何实现if (dead.All(dead[] == true))
?
答案 0 :(得分:18)
您只需使用 lambda-expression :
if (dead.All(x => x))
根据using System.Linq
的{{3}}方法。
会做到这一点。此外,返回答案的if
语句是无用的,因此您可以将其重写为:
private bool noBricksLeft() {
bool[] dead = new bool[brick.Length];
for (int i = 0; i < brick.GetLength(0); i++) {
if (brickLocation[i, 2] == 0)
dead[i] = true;
else
continue; //move onto the next brick
}
return dead.All(x => x);
}
部分借鉴IEnumerable<T>.All
的另一个想法如下:
private bool noBricksLeft() {
return Enumerable.Range(0,brick.Length).All(i => brickLocation[i,2] == 0);
}
答案 1 :(得分:6)
是的,您可以使用.All
,但您的代码仍然不是很好。据我所知,您可以像这样重写代码,而无需使用数组:
private bool noBricksLeft () {
for (int i = 0; i < brick.GetLength(0); i++) {
// inverted your condition; we can short-circuit
// and just return false
if (brickLocation[i, 2] != 0)
return false;
}
// every brick passed our condition, so return true
return true;
}
答案 2 :(得分:2)
您可以使用return dead.All(x => x);