尝试将一些VB转换为C#...(也学习C#)。 我有一些代码循环遍历目录中的文件并检索其文件信息。我最初在VB中使用它,但我正在尝试学习C#,而在线转换器不会给我通过.net 2.0的代码。
这是错误:
Type and identifier are both required in a foreach statement
这是我的代码:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
FileInfo f = default(FileInfo);
foreach (f in files) { ...
}
我尝试了foreach(FileInfo f...
,但它给了我一个不同的错误:
A local variable named 'f' cannot be declared in this scope because it would give a different meaning to 'f', which is already used in a 'parent or current' scope to denote something else
我该如何解决?
答案 0 :(得分:13)
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
// I removed the declaration of f here to prevent the name collision.
foreach (FileInfo f in files)
{ ...
}
这是一个更简单的代码版本:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
foreach (FileInfo f in dirInfo.GetFiles())
{
}
答案 1 :(得分:1)
您应该提供循环内使用的变量类型。在您的情况下,它将是FileInfo
。但是使用C#3.0或更高版本,您只需编写var
,编译器就会为您推断类型:
foreach (FileInfo f in files)
{
// ...
}
详细了解foreach声明here。
完整的解决方案(您不需要初始化迭代变量和文件数组):
DirectoryInfo dir = new DirectoryInfo(currentDir);
foreach (FileInfo file in dir.GetFiles())
{
// use file
}
答案 2 :(得分:1)
这就是你出错的地方:
FileInfo f = default(FileInfo);
foreach (f in files) { ...
}
您在循环外定义f,然后尝试在循环中定义它。
如果您需要默认值为f,请尝试以下操作:
FileInfo f = default(FileInfo);
foreach (FileInfo file in files)
{
relevant code here
}
否则删除声明变量“f”
的语句答案 3 :(得分:0)
这应该有效:
DirectoryInfo dirInfo = new DirectoryInfo(currentDir);
FileInfo[] files = null;
files = dirInfo.GetFiles();
foreach (FileInfo f in files)
{
}
编辑:
在我看来,这会更清洁:
foreach (FileInfo f in new DirectoryInfo(currentDir).GetFiles())
{
}