方法中 Foreach 循环内的 Foreach 循环和 Return 值

Foreach Loop Within A Foreach Loop In A Method And Return Values

我有以下代码,我在其中尝试枚举共享驱动器上的文件,收集每个文件的属性,然后 return 该集合中的每个条目。

Visual Studio 给我“CS0161:'Program.EnumerateYourFiles(string)':并非所有代码路径 return 都有一个值。”当我将鼠标悬停在 EnumerateYourFiles 方法上时出错。我猜这与我尝试 return 的“l”变量超出范围这一事实有关。我如何将那个“l”变量放入作用域,以便它 returns 用于函数?

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;
            }
         

        }

    }
}
foreach(object l in listOfAllFiles)
{
    return l;
}

行不通。

尝试

return listOfAllFiles

相反。

考虑 return 使用 object 以外的东西,例如 IEnumerable<string>,除非您的用例需要 object(这并非前所未有;WPF 中的某些地方就是这样)。

如果您每次调用该方法时都尝试 return 列表中的一项,请尝试

yield return l;

相反。然后你的方法应该 return a string.