2009-07-10 16 views
1

私はLINQの新生児です。.NET/C# - ここで適切な使用方法 - LINQ

public class Folder 
{ 
    public Folder(string path) 
    { 
     string[] files = Directory.GetFiles(path); 
     IList<FileInfo> fis = new List<FileInfo>(); 
     files.SomeMethod(x => fis.Add(new FileInfo(x))); 
    } 

} 

それが仕事を得るために、このとのsomeMethodを置き換えるために、正しいメソッド名は何ですか: ここで私がこれまで持っているコードのですか? 私は基本的にちょうどここにループを書くより簡潔な方法が好きです。

答えて

13

ListのForEach機能のようなものを探しているようです。いずれかを使用せずに - あなたは、次の...

files.ToList().ForEach(x => fis.Add(new FileInfo(x)));  

か、より直接的なアプローチとして

IList<FileInfo> fis = (from f in Directory.GetFiles(path) 
         select new FileInfo(f)).ToList(); 

か...

IList<FileInfo> fis = Directory.GetFiles(path).Select(s => new FileInfo(s)).ToList(); 
// or 
IList<FileInfo> fis = Directory.GetFiles(path) 
         .Select(s => new FileInfo(s)) 
         .ToList(); 

かをこのような何かを行うことができますを行うことができますこれはどうですか?

IList<FileInfo> fis = new List<FileInfo>(new DirectoryInfo(path).GetFiles()); 
4

あなたは、静的するForEachメソッドを使用できます

Array.ForEach(x => fis.Add(new FileInfo(x))); 

をしかし、あなたは簡単にこの1行で全体の機能を置き換えることができます。

IList<FileInfo> fis = Directory.GetFiles(path). 
    Select(f => new FileInfo(f)).ToList(); 
2
var fis = 
    new List<FileInfo>(
     from f in Directory.GetFiles(path) select new FileInfo(f)); 
0
string[] files = Directory.GetFiles(path); 
IList<FileInfo> fis = new List<FileInfo>(); 
Array.ForEach(files, x => fis.Add(new FileInfo(x))); 
1

DirectoryInfoメソッドが既にありますこれを行うには:

DirectoryInfo di = new DirectoryInfo(path); 
FileInfo[] fis = di.GetFileSystemInfos(); 

これをListにする必要がある場合は、Enumerable.ToListを使用します。

関連する問題