2009-12-10 6 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에 대한 중괄호가 없습니다 –

+0

질문을 업데이트 해 드리겠습니다 ... –

2

두 번째 항목은 코드의 의미를 변경하기 때문에 잘못되었습니다. 제 1 회 항목이 작동하지만 중괄호는 언어에 의해 필요하지 않은 당신은 자신의 누락됩니다 방해하기 때문에, 당신은 아마이 원하는 :

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) 
    { 
    } 
} 

편집 당신이 당신의 질문을 변경 이제
, 확실히 첫 번째 옵션입니다.