C#问题维护一些代码

时间:2009-12-10 23:39:50

标签: 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代码示例中看到很多这样的内容。

感谢。

2 个答案:

答案 0 :(得分: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)
    {
    }
}

如果您的阻止声明不包含任何{},则只会包含下一行。

答案 1 :(得分: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)
    {
    }
}

修改
既然你改变了问题,那肯定是第一个选择。