.NET / C# - 在此使用的正确方法 - LINQ

时间:2009-07-10 16:23:37

标签: c# .net linq loops

我是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以使其正常工作的正确方法名称是什么? 我基本上只是想在这里编写一个循环的更简洁的方法。

5 个答案:

答案 0 :(得分: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();

或者 - 根本不使用任何linq,这个怎么样?...

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

答案 1 :(得分:4)

可以使用静态ForEach方法:

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

但是,您可以使用以下一行轻松替换整个功能:

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

答案 2 :(得分:2)

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

答案 3 :(得分:1)

已经有一个DirectoryInfo方法来执行此操作:

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

如果您需要它作为List,请使用Enumerable.ToList。

答案 4 :(得分:0)

string[] files = Directory.GetFiles(path);
IList<FileInfo> fis = new List<FileInfo>();
Array.ForEach(files, x => fis.Add(new FileInfo(x)));