方法中 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
.
我有以下代码,我在其中尝试枚举共享驱动器上的文件,收集每个文件的属性,然后 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
.