根据下面的代码片段,当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()函数的行为等于字符串数组?
答案 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。