Я пытаюсь вернуть список типов FileInfo путем поиска в произвольной директории рекурсивно. Тем не менее, в моем основном() методе, когда я проверяю, есть ли счет FoundFiles, это означает, что я вернул пустой объект. См код ниже:Невозможно вернуть Список <FileInfo> объект
using System;
using System.IO;
using System.Collections.Generic;
class FindExtensions
{
private static List<FileInfo> SearchFileSystem(DirectoryInfo DirInfo, List<FileInfo> FileList)
{
List<FileInfo> FileInfoList = new List<FileInfo>();
try
{
foreach (DirectoryInfo SubdirInfo in DirInfo.GetDirectories())
{
SearchFileSystem(SubdirInfo, FileList);
}
}
catch
{
// do some stuff
}
try
{
foreach (FileInfo File in DirInfo.GetFiles())
{
FileInfoList.Add(File);
}
}
catch
{
// do some stuff
}
foreach (FileInfo f in FileInfoList)
{
Console.WriteLine(f.FullName);
}
return FileInfoList;
}
static void Main()
{
DirectoryInfo dir_info = new DirectoryInfo(@"C:\<whatever>");
List<FileInfo> file_list = new List<FileInfo>();
List<FileInfo> FoundFiles = SearchFileSystem(dir_info, file_list);
Console.WriteLine("Count is: " + FoundFiles.Count);
//^^^^ this returns 0...why is it empty?
Console.WriteLine("This is the debug mode. Press key to restart");
Console.ReadKey();
}
}
Я добавил цикл в методе SearchFileSystem, чтобы проверить содержимое FileInfoList до моего возвращения, и он будет содержать файлы. Однако в нем нет ничего основного. Я новичок в нюансах C#, поэтому извиняюсь, если это довольно легко.
Кроме того, стоит отметить, что если я использую Type List со строкой вместо FileInfo, это работает отлично. Надеемся использовать Список типов FileInfo, если это возможно.
Спасибо.
Я должен был сказать это выше, но я должен учитывать файлы, которые пользователь, запускающий программу, будет иметь несанкционированный доступ. Следовательно, рекурсивная стратегия. Однако я использую метод AddRange. – corneria
Спасибо, сэр! Очень ценится. – corneria
Объекты @PiyushParashar по умолчанию передаются по ссылке в C#. Только с structs вам нужно явно указать, что вы передаете ref или out. Это не плохая идея для объектов, потому что в ней говорится о намерении, но для очень упрощенного кода, как это, я обычно пропускаю. – techvice