c# - 方法中的 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;
}
}
}
}
解决方案
foreach(object l in listOfAllFiles)
{
return l;
}
行不通。
尝试
return listOfAllFiles
反而。
object
考虑返回, like以外的其他内容IEnumerable<string>
,除非您的用例需要object
(这并非史无前例;WPF 中有类似的地方)。
如果您每次调用该方法时都尝试从列表中返回一项,请尝试
yield return l;
反而。然后,您的方法应该返回一个string
.
推荐阅读
- docker - Docker Container 无法访问 Docker 主机网络
- api - Chainlink 大响应尝试从任何 Api 返回字符串
- list - 来自 YAML 列表的访问元素
- c++ - 是否可以保留 ::ReplaceFile 的句柄?
- android-studio - BluetoothGattCharacteristic NullPonterException
- jenkins - 哪些工具将有助于提供与 sonarqube 提供的相同功能?
- javascript - 先进先出库存管理和计算销货成本(销货成本)
- asp.net - Azure 服务器上的 Web 套接字连接失败
- spartacus-storefront - Spartacus 4.0.0 - “OutletPosition”类型上不存在“BEFORE”属性
- reactjs - Spring Cloud Gateway Webflux Okta