4

一部のVBをC#に変換しようとしています...(C#も学習しています)。ディレクトリ内のファイルをループしてファイル情報を取得するコードがいくつかあります。私はこれを元々VBに持っていますが、C#を学習しようとしていますが、オンラインコンバーターは.net2.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

4 に答える 4

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())
{
}
于 2012-05-10T21:13:53.577 に答える
1

これがあなたが間違っているように見えるところです:

FileInfo f = default(FileInfo);
foreach (f in files) {  ...
}

ループの外側でfを定義してから、ループ内でfを定義しようとしています。

デフォルトをfにする必要がある場合は、次のことを試してください。

FileInfo f = default(FileInfo);
foreach (FileInfo file in files)
    {
         relevant code here
    }

それ以外の場合は、変数「f」を宣言しているステートメントを削除します

于 2012-05-10T21:22:31.497 に答える
1

ループ内で使用される変数のタイプを指定する必要があります。あなたの場合はそうなりますFileInfo。ただし、C#3.0以降では、書き込みを行うだけvarで、コンパイラーがタイプを推測します。

foreach (FileInfo f in files) 
{  
   // ...
}

foreachステートメントの詳細についてはこちらをご覧ください。

完全なソリューション(反復変数とファイルの配列を初期化する必要はありません):

DirectoryInfo dir = new DirectoryInfo(currentDir);
foreach (FileInfo file in dir.GetFiles()) 
{
   // use file  
}
于 2012-05-10T21:13:13.210 に答える
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())
            {
            }
于 2012-05-10T21:19:41.687 に答える