2009-12-10 56 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) 
    { 
    } 
} 

编辑
现在你改变了你的问题,这绝对是第一个选择。