2009-07-10 41 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

聽起來像你正在尋找像列表中的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(); 

或者 - 不使用任何linq在所有這個怎麼樣?...

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

可以使用靜態的ForEach方法:

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

但是,你可以很容易地與這一行替換整個函數:

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(); 

如果你需要它是一個列表,使用Enumerable.ToList。

相關問題