.NET / C # - правильный метод для использования здесь - LINQ - PullRequest
1 голос
/ 10 июля 2009

Я новичок в 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 ]

13 голосов
/ 10 июля 2009

звучит так, будто вы ищете что-то вроде функции 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());
4 голосов
/ 10 июля 2009

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

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

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

IList<FileInfo> fis = Directory.GetFiles(path).
    Select(f => new FileInfo(f)).ToList();
2 голосов
/ 10 июля 2009
var fis =
    new List<FileInfo>(
        from f in Directory.GetFiles(path) select new FileInfo(f));
1 голос
/ 12 июля 2009

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

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

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

0 голосов
/ 10 июля 2009
string[] files = Directory.GetFiles(path);
IList<FileInfo> fis = new List<FileInfo>();
Array.ForEach(files, x => fis.Add(new FileInfo(x)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...