C # Фильтрация коллекций через расширенные функции - PullRequest
0 голосов
/ 22 июля 2011

У меня есть строка ниже в моем коде.

Мое объяснение SkipWhile() будет блокировать нули и будет передавать только допустимые значения в ForEach ().Но нули также передаются в ForEach().В чем может быть ошибка в этом коде?

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

Ответы [ 2 ]

4 голосов
/ 22 июля 2011

Используйте метод Where, то есть:

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

Допустим, в вашем коде значения в logChildFolder: null, a, b, null.logChildFolder.SkipWhile(path1 => string.IsNullOrEmpty(path1)) вернет a, b, null.

2 голосов
/ 22 июля 2011

Метод SkipWhile пропускает только первые элементы, пока есть нулевые значения, как только есть ненулевое значение, он просто пропускает остальные элементы.Используйте метод Where для фильтрации элементов.

Кроме того, вы смешиваете функциональный стиль с нефункциональным стилем.Просто используйте цикл foreach, чтобы зациклить элементы.Это также избавит вас от создания прерывистого списка:

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