2009-07-10 47 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。

相关问题