DirectoryCatalog.LoadedFiles одна строка foreach не работает - PullRequest
0 голосов
/ 08 апреля 2020

В настоящее время я пытаюсь вывести все загруженные файлы из DirectoryCatalog на консоль, используя одну строку foreach

Код:

DirectoryCatalog catalog = new DirectoryCatalog(".");

Array.ForEach(catalog.LoadedFiles, x => Console.WriteLine(x));

Это даст следующая ошибка:

Аргументы типа для метода не могут быть выведены из использования. Попробуйте явно указать аргументы типа.

Я пытаюсь что-то подобное (указав аргумент типа с явным приведением):

Array.ForEach((ReadOnlyCollection<string>)catalog.LoadedFiles, x => Console.WriteLine(x));

и все равно не работает

Примечание:

Этот код работает нормально:

 foreach (var loadedFile in catalog.LoadedFiles)
 {
       Console.WriteLine(loadedFile);
 }

Есть идеи?

1 Ответ

0 голосов
/ 08 апреля 2020

Свойство DirectoryCatalog.LoadedFiles возвращает ReadOnlyCollection файлов, которые не являются неявным массивом. Здесь метод ForEach<T> ожидает массив (одно измерение) с элементами типа T. В этом случае вам сначала нужно преобразовать ReadOnlyCollection в массив, прежде чем обращаться к нему. Вы можете использовать ToArray() метод расширения для ReadOnlyCollection, чтобы сначала преобразовать его в массив, прежде чем применять для ForEach<T>.

var files= DirectoryCatalog.LoadedFiles.ToArray();

В качестве альтернативы, вы можете использовать метод CopyTo в ReadOnlyCollection

string[] files= new string[theObject.TheProperty.Count];
DirectoryCatalog.LoadedFiles.CopyTo(files, 0);
...