-1

クラスに関数がありますが、「Withdraw」の下に「すべてのコード パスが値を返すわけではありません」というエラーが表示されます。ボイドを追加するとうまくいくと思いましたが、それをなくすことはできません。コードを修正する方法を知っていますか? ここにその部分があります:

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;
  }
4

7 に答える 7

3

直接的な答えではありませんが、あなたのメソッドは計算とユーザーへのメッセージの表示という多くの目的を果たしていると思います。このような2つのメソッドの使用を検討する必要があります

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

発信者のコード

try{
 Withraw(...)
}
catch{
 Your messageBox
}
于 2013-04-23T07:09:57.327 に答える
2

以下のコード行が値を返さないのは、主な根本原因です。

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

の後に double 値を返す必要がありますMessageBox.Show

于 2013-04-23T07:00:01.537 に答える
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正しくない場合は計算を返します。

于 2013-04-23T06:59:04.370 に答える
0

関数は double を返すことが期待されていますが、そう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;
}
于 2013-04-23T06:58:59.680 に答える