首页 > 解决方案 > 方法中的 Foreach 循环内的 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;
            }
         

        }

    }
}

标签: c#methodsforeachreturn-value

解决方案


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

行不通。

尝试

return listOfAllFiles

反而。

object考虑返回, like以外的其他内容IEnumerable<string>,除非您的用例需要object(这并非史无前例;WPF 中有类似的地方)。

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

yield return l;

反而。然后,您的方法应该返回一个string.


推荐阅读