C#通过扩展函数过滤集合

时间:2011-07-22 09:50:51

标签: c# .net linq lambda extension-methods

我的代码中有以下行。

我的指示是SkipWhile()将阻止空值,并且只将有效值传递给ForEach()。但是空值也传递给ForEach()。在这段代码中可能会失败的是什么?

logChildFolder.SkipWhile(path1 => string.IsNullOrEmpty(path1))
            .ToList<string>()
            .ForEach(path2 => copyLogFiles(args.SetupInfo.SetupDataFolder, path2));

2 个答案:

答案 0 :(得分:4)

使用Where方法,即:

logChildFolder.Where(path1 => !string.IsNullOrEmpty(path1))

假设logChildFolder中的代码值为:nullabnulllogChildFolder.SkipWhile(path1 => string.IsNullOrEmpty(path1))将返回abnull

答案 1 :(得分:2)

SkipWhile方法只会跳过第一项,只要有空值,只要有一个非空值,它就会让剩下的项目通过。使用Where方法过滤项目。

此外,您将功能风格与非功能风格混合在一起。只需使用foreach循环来循环项目。这样可以避免创建间歇性列表:

foreach (string path in logChildFolder.Where(p => !string.IsNullOrEmpty(p))) {
  copyLogFiles(args.SetupInfo.SetupDataFolder, path);
}