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