0

コードのコメントの質問を参照してください。

私には2つのクラスがあります。

メインクラス(クラス1)は次のとおりです。

//this class contains controls on the form.
Class MyApp
{
    private void btnProcessImages_Click(object sender, EventArgs e)
    {
        /* if an error occurs in the method below, I want to: 
               1. Show the error message, and
               2. Based on fail or success do different actions.
        */
        Calculate.DevideNumbers(2, 0);
    }

    /* 
       if the above is successful, I want to do 1 thing, 
       if not, i want to do something else (with controls on THIS form).
    */ 

}

そして、これが2番目のクラスです。

Class Calculate
{
     public double void DivideNumbers(int num1, int num2)
     {
           double result = 0.00;

           try
           {
                result = num1/num2;
                return result;
           }
           catch (Exception)
           {
                throw;
           }  
     }
}

私の質問は、DivideNumbers()が呼び出し元のメソッドにエラーを報告するための最良の方法は何ですか?

呼び出し元は、エラーが発生したかどうか、およびエラーメッセージが何であったかを知る必要があります。これらの2つの情報を呼び出し元のメソッドに送信するにはどうすればよいですか?

4

5 に答える 5

3

トライキャッチインDivideNumbersを削除し、例外をバブルアップさせます。

次に、呼び出しをtrycatchCalculate.DevideNumbers(2, 0);ブロックでラップします。

//this class contains controls on the form.
Class MyApp
{
    private void btnProcessImages_Click(object sender, EventArgs e)
    {
      try
      {
          Calculate.DevideNumbers(2, 0);
      }
      catch (Exception e)
      {
           DoStuff();
           Return();
      }
    }
}
于 2012-08-28T21:26:11.880 に答える
1

できるよ:

class MyApp : Form
{
    //...

    bool erroroccurs = false;
    private void btnProcessImages_Click(object sender, EventArgs e)
    {
          try
          {
              Calculate.DevideNumbers(2, 0);
          }
          catch(Exception ex)
          {
              MessageBox.Show(ex.Message);
              erroroccurs = true;
          }
    }
}
于 2012-08-28T21:27:58.417 に答える
1

DevideNumbersメソッドのtrycatchを削除します。catchには何もしないので、私はそこでは役に立ちません。try catchをbtnProcessImages_Clickメソッドに配置すると、エラー処理を追加できます。

于 2012-08-28T21:29:48.140 に答える
0

まず、提供したコードによると、例外を除いて何もしていないため、try catchブロックを追加しないでください。DevideNumbersあなたがそれで何かをすることを計画している場合にのみ例外をキャッチする必要があります(例えばエラーをログに記録する)

とにかく例外が発生するので、そのtry catchブロックは必要ありません

呼び出し元のメソッドでは、呼び出し時に例外をキャッチDevideNumbersして魔法をかけることができます。

于 2012-08-28T21:30:15.040 に答える
0

これが私のおすすめです。非常に明白ではない、私が変更したいくつかのことに注意してください。

  • DivideNumbersはaを返しますdouble(値を返すようにしましたが、メソッドはとしてマークされましvoidた。
  • int私は1つをにキャストしdoubleましたDivideNumbers。でint割った値intは常にintです。これにより、暗黙的な丸めが必要/予期されない限り、予期しない結果が生じる可能性があります。
  • 例外処理は別のクラスで実行されます。これは、例外処理が必要な場所であると思われるためです。IE例外を再スローすることが唯一の目的である場合、例外をキャッチするポイントは何ですか?泡立ててください。

..。

Class MyApp
{
    private void btnProcessImages_Click(object sender, EventArgs e)
    {
        try 
        {
            double result = Calculate.DevideNumbers(2, 0);
            HandleSuccess(result);
        }
        catch (Exception ex)
        {
            HandleError(ex.Message);
        }
    }

    private void HandleSuccess(double result)
    {
        // Do whatever you do when no errors occur
    }

    private void HandleError(string errorMessage)
    {
        // Do whatever you do when an error occurs... log the exception, etc.
    }
}

..。

Class Calculate
{
    public static double DivideNumbers(int num1, int num2)
    {
        result = (double)num1/num2;
        return result;

        // There's no need to catch an exception here if you're ONLY going to re-throw it.
    }        
}
于 2012-08-28T21:38:39.413 に答える