C# 方法中Foreach循环内的Foreach循环,并返回值

C# 方法中Foreach循环内的Foreach循环,并返回值,c#,methods,foreach,return-value,C#,Methods,Foreach,Return Value,我有下面的代码,我试图枚举共享驱动器上的文件,收集每个文件的属性,然后返回该集合中的每个条目 Visual Studio向我显示“CS0161:”程序。EnumerateYourFiles(字符串)':并非所有代码路径都返回值。当我将鼠标悬停在EnumerateYourFiles方法上时出错。我猜这与我试图返回的“l”变量超出范围有关。如何使“l”变量进入作用域,使其返回函数 using System; using System.IO; using System.Collections.Gene

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

Visual Studio向我显示“CS0161:”程序。EnumerateYourFiles(字符串)':并非所有代码路径都返回值。当我将鼠标悬停在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;
            }
         

        }

    }
}
使用系统;
使用System.IO;
使用System.Collections.Generic;
命名空间文件共享机
{
公共课程
{
静态void Main(字符串[]参数)
{
Console.WriteLine(枚举文件(@“E:\”);
}
公共静态对象枚举文件(字符串路径搜索)
{
字符串filePath=pathToSearch;
DirectoryInfo currentParentFileList=新的DirectoryInfo(文件路径);
DirectoryInfo[]listOfSubDirectories=currentParentFileList.GetDirectories();
List listOfAllFiles=new System.Collections.Generic.List();
foreach(listOfSubDirectories中的var parentPath)
{
string pathForEnumeration=parentPath.ToString();
DirectoryInfo individualSubFolder=新的DirectoryInfo(pathForEnumeration);
尝试
{
foreach(在individualSubFolder.EnumerateFiles(“*”,SearchOption.AllDirectory)中的var eachFile)
{
string IndividualPath=eachFile.FullName.ToString();
字符串lastAccessed=eachFile.LastAccessTime.ToString();
string fileSize=eachFile.Length.ToString();
string creationTime=eachFile.creationTime.ToString();
字符串lastWriteTime=eachFile.lastWriteTime.ToString();
string fileDirectory=eachFile.Directory.ToString();
//下面的操作就像做梦一样。这是您写入文件的方式。您需要一个数组或列表
添加(个人路径);
添加(文件大小);
添加(文件目录);
添加(creationTime);
listOfAllFiles.Add(上次访问);
添加所有文件的列表(lastWriteTime);
}
}
捕获(System.UnauthorizedAccessException)
{
bool errorshown=true;
如果(抛出错误)
{
WriteLine(“以下路径出现访问错误{0}”,individualSubFolder);
继续;
}
其他的
{
继续;
}
}
}
//返回子目录列表;
foreach(所有文件列表中的对象l)
{
返回l;
}
}
}
}
这是行不通的

试一试

相反

考虑返回除
对象
以外的其他对象,如
IEnumerable
,除非您的用例需要
对象(这不是前所未有的;WPF中有类似的地方)

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

yield return l;

相反。然后,您的方法应该返回一个
字符串

您的意思是
产生返回
?谢谢!成功了!我想我的头被轴缠住了,不能正常思考。@user7431743请记住。
return listOfAllFiles
yield return l;