Я новичок в 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 на это, чтобы заставить его работать? Я бы просто хотел здесь более сжатый способ написания цикла.

1
BuddyJoe 10 Июл 2009 в 20:23

5 ответов

Лучший ответ

Похоже, что вы ищете что-то вроде функции ForEach в List. Вы можете сделать следующее ...

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());
13
Scott Ivey 10 Июл 2009 в 17:00

Вы можете использовать статический метод ForEach:

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

Однако вы можете легко заменить всю функцию этой одной строкой:

IList<FileInfo> fis = Directory.GetFiles(path).
    Select(f => new FileInfo(f)).ToList();
4
casperOne 10 Июл 2009 в 16:28
var fis =
    new List<FileInfo>(
        from f in Directory.GetFiles(path) select new FileInfo(f));
2
John Saunders 10 Июл 2009 в 16:30

Для этого уже есть метод DirectoryInfo:

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

Если вам нужен список, используйте Enumerable.ToList.

1
Joe Chung 11 Июл 2009 в 22:33
string[] files = Directory.GetFiles(path);
IList<FileInfo> fis = new List<FileInfo>();
Array.ForEach(files, x => fis.Add(new FileInfo(x)));
0
Arsen Mkrtchyan 10 Июл 2009 в 16:32