2009-12-10 52 views
1

我有下面的代碼我想「修理」C#問題保持一些代碼

foreach (System.IO.DirectoryInfo dir in source.GetDirectories()) 
    CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames); 
foreach (System.IO.FileInfo file in source.GetFiles()) 
    if (safeFileNames) 
    { 
    } 

代碼繼續做多,但我注意到,foreach循環不包含任何括號{} ...

以下哪項會解決此問題:

foreach (System.IO.DirectoryInfo dir in source.GetDirectories()) 
{ 
    CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames); 
} 
foreach (System.IO.FileInfo file in source.GetFiles()) 
{ 
    if (safeFileNames) 
    { 
    } 
} 

或..........

foreach (System.IO.DirectoryInfo dir in source.GetDirectories()) 
{ 
    CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames); 
    foreach (System.IO.FileInfo file in source.GetFiles()) 
     if (safeFileNames) 
     { 
     } 
} 

一旦我修好了外環,我就可以看看清理內環。

在旁註中,沒有比看到代碼邏輯沒有包含控件邊界的明確標記更令人討厭的了。你在網上的JS代碼示例中看到很多這樣的內容。

謝謝。

回答

7

第一個選項是正確的:

foreach (System.IO.DirectoryInfo dir in source.GetDirectories()) 
{ 
    CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames); 
} 

foreach (System.IO.FileInfo file in source.GetFiles()) 
{ 
    if (safeFileNames) 
    { 
    } 
} 

如果你的語句塊不包含任何{},毗鄰線將包括在內。

+0

第一個選項仍然缺失第二個foreach的大括號 – 2009-12-10 23:43:20

+0

讓我更新問題... – 2009-12-10 23:44:31

2

第二項顯然是錯誤的,因爲它會改變代碼的含義。第一項工作,但因爲括號不是由語言要求,你被他們由於缺少困擾,你可能希望這樣的:

foreach (System.IO.DirectoryInfo dir in source.GetDirectories()) 
{ 
    CopyFilesRecursively(dir, target.CreateSubdirectory(dir.Name),safeFileNames); 
} 
foreach (System.IO.FileInfo file in source.GetFiles()) 
{ 
    if (safeFileNames) 
    { 
    } 
} 

編輯
現在你改變了你的問題,這絕對是第一個選擇。