Как привести свойство IEnumerable <DirectoryInfo>в список <string> - PullRequest
0 голосов
/ 12 апреля 2020

Я выполняю следующий код для перечисления всех доступных папок и подпапок в сетевой папке:

    DirectoryInfo dirInfo = new DirectoryInfo(path);
    var dirList = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories);
    foreach (var d in dirList)
    {
        Console.WriteLine(d.FullName);
    }

Сам код работает абсолютно нормально. Однако вместо того, чтобы объявлять var dirList, я бы хотел использовать переменную List<string> напрямую, но мне не ясно, как это сделать.

Ответы [ 2 ]

3 голосов
/ 12 апреля 2020

Это извлечет FullName из последовательности, возвращенной EnumerateDirectories

DirectoryInfo dirInfo = new DirectoryInfo(@"path");
List<string> directories = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories)
                                  .Select(x => x.FullName).ToList();

Метод Select вернет IEnumerable, и вы можете легко преобразовать его в список с расширением ToList.

Однако вы могли бы получить тот же результат, избегая класса DirectoryInfo с более простым классом Directory (все же ToList требуется для работы с возвращенной последовательностью)

List<string> directories = Directory.EnumerateDirectories(path,"*.*", SearchOption.AllDirectories).ToList();
1 голос
/ 12 апреля 2020

Вы можете проверить Linq, например:

var dirList = dirInfo.EnumerateDirectories("*.", SearchOption.AllDirectories).Select(dir => dir.FullName).ToList();
...