如何通过foreach循环获取FileInfo?

时间:2012-05-10 21:11:46

标签: c# foreach asp.net-2.0 code-conversion

尝试将一些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

我该如何解决?

4 个答案:

答案 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())
            {
            }