2013-04-23 55 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 2013-04-23 07:00:37

回答

4

由於您聲明函數返回double,因此需要執行if的任何一個分支。

您需要從iftrue側返回一個值,之後MessageBox回報,如:

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

我明白了。我需要在if語句的真實條件下回報平衡。謝謝! – Jae 2013-04-23 07:26:07

0

您的函數預計會返回一個雙精度,但如果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;  
    } 

考慮提供的代碼的邏輯,如果amount > balance它是不正確的,否則返回計算。

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

但只在其他部分提到。

如果if(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後返回的雙重價值。

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,這可以說是最好的答案,因爲這似乎是商業邏輯。 – 2013-04-23 07:42:22

+0

我不熟悉「調用者代碼」。嘗試抓住似乎對我來說是相同的事情。這應該是某種異常處理程序? – Jae 2013-04-25 03:58:46

+0

@Jae在你的代碼中,你將兩個東西,用戶界面邏輯「ShowMessage」的商業邏輯'balance - amount'混合在一起,如果你將你的方法分開以使主題明確分離,在Withdraw中做你的業務方法,並讓調用者(可能是UI層中的事件處理程序)在出現問題時執行所需的任何操作。這種方法的一個好處是你的類可以在不做任何修改的情況下在不同的技術(WebForm,WinForm ...)中重用。 – 2013-04-25 09:40:07

相關問題