TakeWhile()函数与布尔值无法正常工作。

时间:2015-06-04 10:18:16

标签: c# linq extension-methods

根据下面的代码片段,当fruit数组中的true值不匹配时,结果值应该包含数组的所有值。但是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);

当有bool值数组时,我们是否可以使TakeWhile()函数的行为等于字符串数组?

2 个答案:

答案 0 :(得分:3)

您正在寻找的是:

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

这甚至是合乎逻辑的......在它们是fruit时采用true的元素。

  • 你写了“等于true”......

  • 我写了“不等于String.Compare("orange", fruit, true) != 0

fruit

表示如果“橙色”与<{1}} <{1}} <{1}} ,则为true,否则为false

答案 1 :(得分:1)

您可以简化表达式:

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

这将正确生成一个包含0结果的查询,因为没有匹配。它只会匹配匿名委托实例返回true的那些(即f == true)。

如果您只想计算“不匹配”的结果,只需更改f =&gt; f到f =&gt; !F。