【问题标题】:Foreach Loop Within A Foreach Loop In A Method And Return Values方法中的 Foreach 循环内的 Foreach 循环和返回值
【发布时间】:2020-11-13 16:53:29
【问题描述】:

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

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# methods foreach return-value


    【解决方案1】:
    foreach(object l in listOfAllFiles)
    {
        return l;
    }
    

    不会工作。

    试试

    return listOfAllFiles
    

    改为。

    考虑返回 object 以外的其他内容,例如 IEnumerable&lt;string&gt;,除非您的用例需要 object(这并非史无前例;WPF 中有些地方是这样的)。

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

    yield return l;
    

    相反。然后你的方法应该返回一个string

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-26
      • 2012-07-19
      • 1970-01-01
      • 2016-05-22
      • 2021-05-28
      • 1970-01-01
      • 2021-09-24
      相关资源
      最近更新 更多