#c# #methods #foreach #return-value
#c# #Методы #foreach #Возвращаемое значение
Вопрос:
У меня есть следующий код, в котором я пытаюсь перечислять файлы на общем диске, собирать свойства для каждого файла, а затем возвращать каждую запись из этой коллекции.
Visual Studio выдает мне «CS0161: ‘Program.EnumerateYourFiles (string)’: не все пути кода возвращают значение». ошибка при наведении курсора мыши на метод EnumerateYourFiles. Я предполагаю, что это связано с тем фактом, что переменная «l», которую я пытаюсь вернуть, находится вне области видимости. Как мне получить эту переменную «l» в область видимости, чтобы она возвращалась для функции?
using System;
using System.IO;
using System.Collections.Generic;
namespace FileShareMachine
{
public class Program
{
static void Main(string[] args)
{
Console.WriteLine(EnumerateYourFiles(@"E:"));
}
public static object EnumerateYourFiles(string pathToSearch)
{
string filePath = pathToSearch;
DirectoryInfo currentParentFileList = new DirectoryInfo(filePath);
DirectoryInfo[] listOfSubDirectories = currentParentFileList.GetDirectories();
List<string> listOfAllFiles = new System.Collections.Generic.List<string>();
foreach (var parentPath in listOfSubDirectories)
{
string pathForEnumeration = parentPath.ToString();
DirectoryInfo individualSubFolder = new DirectoryInfo(pathForEnumeration);
try
{
foreach (var eachFile in individualSubFolder.EnumerateFiles("*", SearchOption.AllDirectories))
{
string individualPaths = eachFile.FullName.ToString();
string lastAccessed = eachFile.LastAccessTime.ToString();
string fileSize = eachFile.Length.ToString();
string creationTime = eachFile.CreationTime.ToString();
string lastWriteTime = eachFile.LastWriteTime.ToString();
string fileDirectory = eachFile.Directory.ToString();
//The following works like a dream. This is how you write to a file. You need an array or list
listOfAllFiles.Add(individualPaths);
listOfAllFiles.Add(fileSize);
listOfAllFiles.Add(fileDirectory);
listOfAllFiles.Add(creationTime);
listOfAllFiles.Add(lastAccessed);
listOfAllFiles.Add(lastWriteTime);
}
}
catch (System.UnauthorizedAccessException)
{
bool errorThrown = true;
if (errorThrown)
{
Console.WriteLine("The following path had an access error {0}", individualSubFolder);
continue;
}
else
{
continue;
}
}
}
//return listOfSubDirectories;
foreach(object l in listOfAllFiles)
{
return l;
}
}
}
}
Ответ №1:
foreach(object l in listOfAllFiles)
{
return l;
}
не сработает.
Попробуйте
return listOfAllFiles
вместо этого.
Рассмотрите возможность возврата чего-то другого, кроме an object
, like IEnumerable<string>
, если только этого не требует ваш вариант использования object
(это не беспрецедентно; в WPF есть подобные места).
Если вы пытаетесь возвращать один элемент из списка при каждом вызове метода, попробуйте
yield return l;
вместо этого. Затем ваш метод должен вернуть a string
.