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