我试图从主目录之外的filePaths方法访问listFilesInDirectory字符串,但是它给了我以下错误:“名称'filePaths‘在当前上下文中不存在”
internal class Program
{
static void listFilesInDirectory(string workingDirectory)
{
// Let's find some files
string[] filePaths = Directory.GetFiles(workingDirectory);
}
static void Main(string[] args)
{
listFilesInDirectory(@"C:\Temp");
foreach (string filePath in filePaths)
{
Console.WriteLine(filePath);
}
}
}
发布于 2022-06-04 17:29:01
在这种情况下,您不能访问filePaths,因为它超出了方法的范围,您可以通过两种方法来解决这个问题:要么在类中声明一个静态变量,以便任何方法都可以访问它,要么让listFilesInDirectory返回一个string[]。
第一种方法:
internal class Program
{
private static string[] filePaths;
static void listFilesInDirectory(string workingDirectory)
{
// Let's find some files
filePaths = Directory.GetFiles(workingDirectory);
}
static void Main(string[] args)
{
// Receive the return from listFilesInDirectory();
listFilesInDirectory(@"C:\Temp");
foreach (string filePath in filePaths)
{
Console.WriteLine(filePath);
}
}
}
(请注意,此方法每次调用filePaths时都会覆盖listFilesInDirectory变量)
第二种方法:
internal class Program
{
static string[] listFilesInDirectory(string workingDirectory)
{
// Let's find some files
return filePaths = Directory.GetFiles(workingDirectory);
}
static void Main(string[] args)
{
string[] filePaths = listFilesInDirectory(@"C:\Temp");
foreach (string filePath in filePaths)
{
Console.WriteLine(filePath);
}
}
}
我建议您使用第二种方法,因为它更干净、更易读、更容易出错
发布于 2022-06-04 16:49:05
您正在尝试访问超出范围的内容,但无法返回Directory.GetFiles
的输出。您想要做的事情如下:
public class Startup
{
public static void Main(string[] arguments)
{
var files = GetFilesFromPath("Location Here");
foreach(var file in files)
Console.WriteLine(file);
}
public IEnumerable<string> GetFilesFromPath(string path) => Directory.GetFiles(path);
}
代码将有潜在的错误,但重点是lambda将返回文件。然后在主内部使用这些值执行一个变量,然后可以迭代它们。
发布于 2022-06-04 16:58:10
即使两者都是静态的,您也不能从外部访问信息。他们必须沟通。如果你发送信息,你会收到一个新的信息。
listFilesInDirectory是一个无效的方法,它不返回任何东西。您需要将它的返回更改为string[],将filePaths返回到某个变量,然后您就可以对'filePaths‘进行预测了。
internal class Program
{ //Instead of void, set the method to return a string[]
static string[] listFilesInDirectory(string workingDirectory)
{
// Let's find some files
// Return this string[]
return string[] filePaths = Directory.GetFiles(workingDirectory);
}
static void Main(string[] args)
{
// Receive the return from listFilesInDirectory();
string[] filePaths = listFilesInDirectory(@"C:\Temp");
foreach (string filePath in filePaths)
{
Console.WriteLine(filePath);
}
}
}
这应该能行。
顺便说一下,listFilesInDirectory()是一个方法。您应该始终以上字母开头的方法名称。:)
https://stackoverflow.com/questions/72504023
复制