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.
根据下面的代码片段,当 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.