2012-05-10 44 views
4

試圖將一些VB轉換爲C#...(也學習C#)。 我有一些代碼循環通過目錄中的文件並檢索其文件信息。我原本在VB中,但我試圖學習C#,並且在線轉換器不會給我通過.net 2.0的代碼。如何通過foreach循環獲取FileInfo?

以下是錯誤: Type and identifier are both required in a foreach statement

這裏是我的代碼:我試圖把foreach(FileInfo f...

DirectoryInfo dirInfo = new DirectoryInfo(currentDir); 
FileInfo[] files = null; 
files = dirInfo.GetFiles(); 

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

,但它給了我一個不同的錯誤: 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語句;你會得到什麼錯誤? – 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); 
foreach (FileInfo f in dirInfo.GetFiles()) 
{ 
} 
+0

對不起 - 我剛剛更新了我的問題以反映我收到的錯誤當使用它。 – bgmCoder

+0

現在重新閱讀答案。我已更新它以使其更清楚。 –

+0

就是這樣!我會在4分鐘內將此標記爲已接受。謝謝蒲式耳。我知道我必須閱讀一些基礎知識(我知道它在VB中,但我不想將所有內容翻譯成C#...),但我現在沒有時間學習。你們都很有幫助! – bgmCoder

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 
} 
+0

我要下一個SharePoint應用程序運行此F'別的地方,因此.NET 2.0。 var'放棄了這個錯誤:'無法找到類型或命名空間名'var'(你是否缺少using指令或程序集引用?)' – bgmCoder

0

這應該工作:

 DirectoryInfo dirInfo = new DirectoryInfo(currentDir); 
     FileInfo[] files = null; 
     files = dirInfo.GetFiles(); 
     foreach (FileInfo f in files) 
     { 
     } 

Ed它:

這將是清潔的,在我看來:

 foreach (FileInfo f in new DirectoryInfo(currentDir).GetFiles()) 
      { 
      } 
+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 
    } 

否則刪除(在文件的FileInfo F)`應該工作在聲明變量 「F」