2011-07-22 6 views
0

私のコードには次のような行があります。C#拡張機能によるコレクションのフィルタリング

私のexpctationはSkipWhile()はnullをブロックし、有効な値のみをForEach()に渡します。しかしヌルもForEach()に渡されます。このコードで何が失敗する可能性がありますか? Where方法、すなわち:

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

使用しlogChildFolderであなたのコード値に仮定

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

@Guffaは以下の言ったように、 'ToListメソッド()'廃棄物のメモリと、不必要な処理時間、それはすべての結果のメモリ内のコピーが作成されますよう。 – Groo

答えて

4

は以下のとおりです。nullabnulllogChildFolder.SkipWhile(path1 => string.IsNullOrEmpty(path1))abnullを返します。

2

メソッドはnullがある限り、最初のアイテムをスキップします。ヌル以外の値があるとすぐに残りのアイテムを通過させます。 Whereメソッドを使用して項目をフィルタリングします。

また、機能スタイルと非機能スタイルを混在させています。 foreachループを使用してアイテムをループしてください。それはまた、断続的なリストを作成するからあなたを救う:

foreach (string path in logChildFolder.Where(p => !string.IsNullOrEmpty(p))) { 
    copyLogFiles(args.SetupInfo.SetupDataFolder, path); 
} 
関連する問題