日期:2014-05-20  浏览次数:21088 次

lINQ中关于SkipWhile操作符的问题
这个操作符跳过输入序列中符合条件的元素
例如: string[] names = { "abc", "a", "bcd","ab","bcde" };
  IEnumerable<string> name = names.SkipWhile(s => s.StartsWith("a"));
   
  foreach (var ss in name)
  {
  this.listBox1.Items.Add(ss);
   
  }
输出的结果肯定是排除以a开头的字符串,但是我的出现的结果是bcd,ab,bcde 这三个元素,正确的结果应该不包含ab这个元素,谁知道具体是哪里出了问题

------解决方案--------------------
C# code

void Main()
{
    string[] names = { "abc", "a", "bcd","ab","bcde" };
  IEnumerable<string> name = names.OrderBy(s=>s).SkipWhile(s => s.StartsWith("a"));
    
  foreach (var ss in name)
  {
 Console.WriteLine(ss);
  }
}

------解决方案--------------------
//SkipWhile对数据源进行枚举,从第一个枚举得到的元素开始
//如果返回true,则跳过该元素,继续进行枚举操作.
//但是,如果一旦返回false,则该元素以后的所有元素,都不会再调用SkipWhile,
 就拿你的例子来说吧,
string[] names = { "abc", "a", "bcd","ab","bcde" };
前两个元素满足条件,返回true,SkipWhile就会跳过它们,但是,到第三个元素时,返回false,就不会调用SkipWhile,意思就是程序将它后面的所有元素;
TakeWhile函数也是这样的原理

如何LZ想了解多一点,可以看下这里:
http://www.cnblogs.com/qfb620/archive/2008/03/21/1116014.html