2012-07-23 4 views
1

아래는 폴더의 파일 수를 계산하는 데 사용하는 코드 조각입니다 (추가 파일이 아닌 파일 만). 이 폴더에 하나 이상의 파일이있는 경우 예외를 throw해야합니다. 현재폴더에 둘 이상의 파일이있는 경우 예외가 발생합니다.

if (!CheckCondition2(SourceFolder)) 
{ 
    CanCopy = false; 
    throw new Exception("More than one mark-off file."); 
} 

을 내가 그것을 테스트 할 때, 그것은 단지 하나를 거기에도 불구하고 나를 디렉토리에 하나 개 이상의 파일이 알려줍니다

private bool CheckCondition2(String FolderName) 
{ 
    bool ConditionPassed = false; 

    System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName); 
    int count = dir.GetFiles().Length; 

    ConditionPassed = (count > 1); 

    return ConditionPassed; 
} 

그때에 주에를 호출합니다. 내 코드에서 내가 뭘 잘못 했니?

+6

안녕하세요.'ConditionPassed' 변수의 기록을 따라 디버깅을 고려한 적이 있습니까? –

+0

@ J.Steen : 답변으로 작성하고 올바른 방법을 보여줍니다. –

답변

4

두 개 이상의 파일이있는 경우 방법에 따라 true을 반환합니다.

if 문에서 false을 확인합니다. 당신은 이것을 조금 섞은 것 같습니다.

코드를 디버깅하고 값이 변경되면 논리 오류가 있는지 확인하는 것이 좋습니다. 이를 수행하는보다 자동적이고 신뢰할 수있는 방법은 단위 테스트를 작성하는 것입니다.

당신은

ConditionPassed = (count <= 1); 

그 방법은, 당신이 '올바른'상태에있을 때 방법이 true을 반환한다는 의미로, 당신의 방법으로 상태를 전환 할 수 있습니다. 대신 if 문을 변경하여 읽을 수 있습니다.

if (CheckCondition2(SourceFolder)) 

두 가지 중 하나가 도움이 될 수 있습니다. 후자의 예에서 메소드의 이름을 HasMoreThanOneFile과 같이 변경하면 그것이 무엇을하는지 분명하게 알 수 있습니다. 조건

ConditionPassed = (count <= 1); 

또는 문

if (CheckCondition2(SourceFolder))) 

내가 당신의 성공 시나리오가 가장 한 파일에있을 것입니다 추정하는 경우를

ConditionPassed = (count <= 1); //check should pass if there is at most one file 
+0

나를 위해 몇 가지를 정리해 주셔서 감사합니다. 당신 말이 맞아, 혼란스러워. 코드를 수정했는데 현재 작동하고있는 것 같습니다. 고맙습니다. –

+0

위대 하시겠습니까? 왼쪽의 답안 카운터 아래에있는 눈금을 사용하여 대답을 표시하는 것을 잊지 마십시오. =) –

0

대신 부울를 사용하는 이유를 시도하지 ...

System.IO.DirectoryInfo dir = new System.IO.DirectoryInfo(FolderName); 
int count = dir.GetFiles().Length; 

if (count > 1) 
{ 
    throw new Exception("More than one mark-off file."); 
} 
else 
{ 
    // Something else 
} 

그 코드 깔끔한 비트 (죄송 OCD가에서 발로입니다!)

0

나는 당신의 논리에 결함이 있다고 생각. ConditionPassed = (count> 1)은 ConditionPassed = (카운트 < = 1) 여야합니다. 희망이 도움이!

0

코드 디버깅을 시도하십시오. enter image description here

그것은 그냥 혼동을 피하기 위해 함수의 이름을 업데이트하십시오

if (CheckCondition2(SourceFolder))을 했어야의 if 문에 작은 변경 한 후했다.

+0

코드의 일부를 변경해야하는 경우, 그 자체로 작동하지 않습니다. ;) 메서드의 이름을 지정하면 "통과"에 긍정적 인 의미가 있기 때문에 의도가 true를 반환하는 것일 수 있습니다. =) –

+0

귀하의 의견에 감사드립니다. 나는 너무 빠르려고 노력하고 있었다!! – AksharRoop

관련 문제