C# TakeWhile()函数不能正确处理布尔值。

C# TakeWhile()函数不能正确处理布尔值。,c#,linq,extension-methods,C#,Linq,Extension Methods,根据下面的代码片段,当fruit数组中的true值不匹配时,结果值应包含数组的所有值。但是,TakeWhile()函数没有将不匹配的值添加到我的结果列表中。下面是代码片段 bool[] fruits = { false, false, false, false, false, false}; var query = fruits.TakeWhile(fruit => fruit.Equals(true));

根据下面的代码片段,当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);
string[]水果={“苹果”、“香蕉”、“芒果”、“橙子”,
“西番莲”、“葡萄”};
IEnumerable query=fruits.TakeWhile(fruit=>String.Compare(“橙色”,fruit,true)!=0);

当存在bool值数组时,有没有办法使TakeWhile()函数的行为等同于字符串数组

您正在寻找的是:

var query = fruits.TakeWhile(fruit => !fruit.Equals(true));
这甚至是合乎逻辑的。。。将
水果
的元素

  • 你写了“等于
    true

  • 我写了“不等于
    true


意思是如果“橙色”与水果不同,那么你要寻找的是:

var query = fruits.TakeWhile(fruit => !fruit.Equals(true));
这甚至是合乎逻辑的。。。将
水果
的元素

  • 你写了“等于
    true

  • 我写了“不等于
    true


表示如果“橙色”与水果不同,则可以简化表达式:

        bool[] fruits = { false, false, false, false, false, false };
        var query = fruits.TakeWhile(f => f);
这将正确地生成一个结果为0的查询,因为没有匹配的结果。它将只匹配匿名委托实例返回true的实例(即f==true)


如果您只想计算“不匹配”的结果,只需将f=>f更改为f=>!f、 您可以简化表达式:

        bool[] fruits = { false, false, false, false, false, false };
        var query = fruits.TakeWhile(f => f);
这将正确地生成一个结果为0的查询,因为没有匹配的结果。它将只匹配匿名委托实例返回true的实例(即f==true)

如果您只想计算“不匹配”的结果,只需将f=>f更改为f=>!f