2013-04-23 2 views
-1

클래스에 함수가 있지만 "철회"에서 "모든 코드 경로가 값을 반환하지는 않습니다"라는 오류가 발생합니다. 나는 공백을 추가하는 것이 속임수를 쓰겠지만 멀리 떨어지는 것처럼 보일 수는 없다고 생각했습니다. 코드 수정 방법을 알고 있습니까? 여기 부분은 다음과 같습니다함수에서이 오류 메시지를 제거하려면 어떻게합니까?

public virtual double Withdraw(double amount) 
    { 
    if (amount > balance) 
    { 
     MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
    } 
    else 
     return balance - amount; 
    } 
+2

모든 응답자에게 질문을주의 깊게 읽으면 반환 값이 잔액입니다. 그러니 그 대신에 0 – leppie

답변

4

함수가 double을 반환한다고 선언 했으므로 if 분기를 가져와야합니다.

당신은, MessageBox 반환 후 iftrue 측면에서 값을 반환하는 예 :

if (amount > balance) 
{ 
    MessageBox.Show(...); 
    return balance; 
} 
else ... 
+0

대신에 돌아 오십시오. 나는 if 진술의 진실한 조건에 균형을 되돌려 줄 필요가있다. 고맙습니다! – Jae

0

귀하의 기능은 이중 반환 것으로 예상하지만 amount>balance 경우는하지 않습니다됩니다. 이 정확하지의 amount > balance 경우

public virtual double Withdraw(double amount) 
{ 
    if (amount > balance) 
    { 
     //your messagebox code  
     return double.NaN; // or whatever you think is correct in this case. 
    } 
    else 
     return balance - amount; 
} 
2

당신의 송시는 항상 다른 계산을 반환, 그래서

public virtual double Withdraw(double amount) 
    { 
    if (amount > balance) 
    { 
     MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     return SOME_NON_VALID_VALUE_FOR_YOUR_APP; //or raise an exception, 
     // depends on architecture 
    } 

    return balance - amount;  
    } 

제공되는 코드의 논리를 고려, 어떤 상태에서, 어떤 값을 반환해야합니다.

1

당신은 MessageBox.Show은 idealy 0

public virtual double Withdraw(double amount) 
    { 
    if (amount > balance) 
    { 
     MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
      return 0; 
    } 
    else 
     return balance - amount; 
    } 
0

당신은 후에 뭔가를 retrn해야 할 필요가 함수를 통해 double 값을 반환합니다.

하지만 다른 부분에서만 언급했습니다.

(amount> balance) 조건이 참이면 값을 반환해야하는 경우.

코드 아래를 참조 코드의

public virtual double Withdraw(double amount) 
     { 
     if (amount > balance) 
     { 
      MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
     } 
     else 
      return balance - amount; 

     return 0; 
     } 
2

당신의 라인은 다음과 같습니다 주요 근본 원인을 어떤 값을 반환하지 않습니다

if (amount > balance) 
{ 
    MessageBox.Show("Debit amount exceeded account balance.", "Insufficient funds!", MessageBoxButtons.OK, MessageBoxIcon.Exclamation); 
} 

당신은 MessageBox.Show 후 double 값을 반환해야합니다.

3

아니 직접적인 대답하지만 난 당신의 방법, 당신은 호출자의

public virtual double Withdraw(double amount) 
{ 
    if (amount > balance)  
     throw new Exception("your message")   
    else 
     return balance - amount; 
} 

코드 같은 두 가지 방법을 사용하는 것이 좋습니다 여러 가지 목적, 계산 서비스를 제공하고 사용자에게 메시지를 보여주고있다 생각

try{ 
Withraw(...) 
} 
catch{ 
Your messageBox 
} 
+1

+1 이것은 비즈니스 로직 인 것처럼 틀림없이 가장 좋은 대답입니다. –

+0

나는 "발신자 코드"에 익숙하지 않다. try catch는 나에게 똑같은 것으로 보인다. 그게 어떤 종류의 예외 처리 자라고 생각합니까? – Jae

+0

@Jae 당신의 코드에서 UI 로직'ShowMessage'로 비즈니스 로직'balance - amount'를 두 가지로 섞어 놓았습니다. 테마를 명확히 구분하려면 메소드를 분리하면됩니다. Withdraw에서 비즈니스하십시오 메서드를 호출하고 호출자가 UI 레이어의 이벤트 핸들러 일 수 있습니다. 이 접근법의 한 가지 이점은 거의 모든 수정 작업없이 클래스가 다른 기술 (WebForm, WinForm ...)에서 재사용 될 수 있다는 것입니다. –

관련 문제