2012-05-10 10 views
4

VBをC#に変換しようとしています(C#も学習しています)。 ディレクトリ内のファイルをループしてファイル情報を取得するコードがあります。私はVBでこれを元々持っていますが、C#を学ぼうとしています。オンラインコンバータは、私に.net 2.0を渡すコードを与えません。ここでforeachループ経由でFileInfoを取得するには?

は誤りである:ここでは 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

私はどのように修理する?

+2

'foreachの(ファイル中のFileInfo F)'動作するはずの宣言文を削除します。どのようなエラーが出ますか? – carlosfigueira

+0

質問にエラーを追加しました。ごめんなさい。私はそれもうまくいくはずだと思ったが、これは.net2ではなく、.net4 - 多分それは違いをもたらすだろうか? – bgmCoder

+1

反復変数を初期化する必要がないので、単に 'FileInfo f = default(FileInfo);'を削除してください。 –

答えて

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); 
     FileInfo[] files = null; 
     files = dirInfo.GetFiles(); 
     foreach (FileInfo f in files) 
     { 
     } 

エドそれ:

これは私の意見では、クリーナーのようになります。

 foreach (FileInfo f in new DirectoryInfo(currentDir).GetFiles()) 
      { 
      } 
+0

申し訳ありません - 私は受け取ったエラーを反映するように質問を更新しましたそれを使うとき。 – bgmCoder

+0

今すぐ解読してください。私はそれをもっと明確にするために更新しました。 –

+0

それはそれでした!これを4分後に受け入れるとマークします。ブッスルありがとう。私はいくつかの基本を読む必要があることを知っています(私はVBでそれを知っていますが、私はC#にすべてを翻訳したくありません)...しかし、私は今勉強する時間がありません。皆さんはとても役に立ちます! – bgmCoder

1

ループ内で使用する変数の型を指定する必要があります。あなたの場合はFileInfoになります。しかし、C#3.0以降であなただけvarを書くことができますし、コンパイラはあなたのための型を推論します:

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

は、foreach文hereについてお読みください。

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

DirectoryInfo dirInfo = new DirectoryInfo(currentDir); 
foreach (FileInfo f in dirInfo.GetFiles()) 
{ 
} 
+0

これはsharepointアプリケーションの下で.net 2.0を実行する必要があります。 'var'を使用すると、このエラーが発生します:'型または名前空間の名前 'var'が見つかりませんでした(使用するディレクティブまたはアセンブリ参照がありませんか?) ' – bgmCoder

0

これがすべき:

DirectoryInfo dir = new DirectoryInfo(currentDir); 
foreach (FileInfo file in dir.GetFiles()) 
{ 
    // use file 
} 
ここ
+0

ファイルの配列に 'null'を割り当てるのはなぜですか? –

+0

私はコードを修正して動作させていました。 – Kevin

1

は、ここであなたが間違っているように見える場所です:

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

あなたは、ループの外でFを定義している、とそれをループ内で定義しようとします。

デフォルトは、Fする必要がある場合は、これを試してみてください。

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

それ以外の場合は、変数 "F"

関連する問題