C# 名称项在当前上下文中不存在

C# 名称项在当前上下文中不存在,c#,visual-studio,C#,Visual Studio,我是C#的初学者,试图构建代码,但我遇到了一个错误。您可以在下面找到代码: string[] sub_directory = Directory.GetDirectories(utils_Analytics); foreach (string item in sub_directory) Console.WriteLine(Path.GetFileName(item.Substring(0,item.Length-10))); string[] files = Directory.GetFil

我是C#的初学者,试图构建代码,但我遇到了一个错误。您可以在下面找到代码:

string[] sub_directory = Directory.GetDirectories(utils_Analytics);
foreach (string item in sub_directory) 
Console.WriteLine(Path.GetFileName(item.Substring(0,item.Length-10)));
string[] files = Directory.GetFiles(item); 
欢迎来到堆栈溢出。 您需要为
foreach
语句创建一个代码块

foreach(condition)
{
    // code here
}
试试这个:

string[] sub_directory = Directory.GetDirectories(utils_Analytics);
foreach (string item in sub_directory) 
{
    Console.WriteLine(Path.GetFileName(item.Substring(0,item.Length-10)));
    string[] files = Directory.GetFiles(item); 
}
您可以使用不带代码块的
foreach
语句,但它仅适用于下一行代码

string[] sub_directory = Directory.GetDirectories(utils_Analytics);
foreach (string item in sub_directory) 
    Console.WriteLine(Path.GetFileName(item.Substring(0,item.Length-10))); // this line is in the foreach
string[] files = Directory.GetFiles(item);  // this line is not

foreach
语句中声明
item
变量时,只能在该语句的范围内(在{}之间)访问该变量。
string[]files=Directory.GetFiles(项)行超出范围。这就是为什么当它试图访问
项时抛出错误的原因

如果foreach循环丢失{},那么代码块应该包含在{}中

此外,您可以尝试以下代码来优化代码:

string[] sub_directory = Directory.GetDirectories(@"...");
        sub_directory.ToList().ForEach
            (
            item =>
            {
                Console.WriteLine(Path.GetFileName(item.Substring(0, item.Length - 10)));
                string[] files = Directory.GetFiles(item);
            }
            );
        Console.ReadKey();
        
如果目录和路径中有错误,可以在代码开头添加以下引用:

using System.IO;

这个错误消息是不言自明的。无论它所指示的内容是什么,在您试图引用它的地方都不存在。您的问题是什么?这可能有助于解释OP收到此错误的原因是因为
string[]files=Directory.GetFiles(item)不在
foreach
块中,因此未定义
项。