TakeWhile() 函数不能正常处理布尔值。

TakeWhile() function is not working properly with Boolean value.

根据下面的代码片段,当 fruit 数组中的真值不匹配时,结果值应包含数组的所有值。但是,TakeWhile() 函数没有将不匹配的值添加到我的结果列表中,下面是代码片段。

 bool[] fruits = { false, false, false, false, 
                                  false, false};    
var query = fruits.TakeWhile(fruit => fruit.Equals(true));

当它是字符串时它起作用:

string[] fruits = { "apple", "banana", "mango", "orange", 
                              "passionfruit", "grape" };
IEnumerable<string> query = fruits.TakeWhile(fruit => String.Compare("orange", fruit, true) != 0);

有什么方法可以使 TakeWhile() 函数在存在布尔值数组时表现得与字符串数组相同?

您要找的是:

var query = fruits.TakeWhile(fruit => !fruit.Equals(true));

这甚至是合乎逻辑的...取 fruit 的元素时...

  • 你写了"equal to true"...

  • 我写了"not equal to true"

String.Compare("orange", fruit, true) != 0

意味着如果"orange"与fruit不同true,否则false

您可以简化表达式:

        bool[] fruits = { false, false, false, false, false, false };
        var query = fruits.TakeWhile(f => f);

这将正确生成包含 0 个结果的查询,因为 none 匹配。它只会匹配匿名委托实例 returns 为真(即 f == 真)的实例。

如果只想统计"not matched"个结果,只需将f => f改为f => !f.