【发布时间】:2010-03-26 22:02:25
【问题描述】:
我有点惊讶地发现以下代码的结果,我只是想从一个整数序列中删除所有 3:
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.SkipWhile(i => i == 3); // Oh noes! Returns { 1, 1, 2, 3 }
为什么不跳过 3?
我的下一个想法是,好的,Except 操作符可以解决问题:
var sequence = new [] { 1, 1, 2, 3 };
var result = sequence.Except(i => i == 3); // Oh noes! Returns { 1, 2 }
总之,
- 除了删除 3,还 删除不明确的元素。 Grr。
- SkipWhile 不会跳过最后一个 元素,即使它匹配 健康)状况。 Grr.
有人可以解释为什么 SkipWhile 不跳过最后一个元素吗?谁能建议我可以使用什么 LINQ 运算符从上面的序列中删除“3”?
【问题讨论】:
-
认为它是 SkipWhile(true)。所以,你的第一个条件 (i==3) 失败了。所以,它变成了 SkipWhile(false) 那么接下来会发生什么?它返回所有剩余的元素!
标签: c# linq linq-to-objects