2012-08-28 85 views
0

在代码的评论中查看问题。我应该如何处理两个类之间的异常?

我有两个类。

这里的主类(第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). 
    */ 

} 

而这里的第二类:

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

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

我的问题是: 什么是DivideNumbers()的最佳方法来报告错误返回到调用方法?

调用者需要知道是否有错误以及错误消息是什么。我将如何去发送调用方法这两条信息?

+0

应将类DoSomething称为计算和方法计算名为DevideNumbers? –

+0

请澄清你的答案,分开问题和代码。另外,你在void方法中返回一个int。 – Andre

+0

我更新了一切。 – Testifier

回答

3

删除DivideNumbers中的try catch,让异常冒泡。

然后在try catch块中调用Calculate.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(); 
     } 
    } 
} 
+0

但是,如果我已经在该方法中使用了try catch,那么它不会被杀死吗? – Testifier

+0

您也可以从内部方法返回true或false,并检查该值以确定错误。两种方式都可以正常工作。 –

+0

@Testifier:您将能够从DivideNumbers中删除try/catch,并让异常冒泡。除非你真的需要处理内在的方法。 – Andre

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; 
      } 
    } 
} 
+0

但是如果我想在Main类中显示错误呢? – Testifier

1

删除您DevideNumbers方法的尝试捕捉,我已经没有用了,因为你没有在捕捉到任何。最好将try catch放在btnProcessImages_Click方法中,然后在那里添加错误处理。

+0

这几乎是我正在寻找的答案。 :)谢谢Erwin! – Testifier

0

首先,您不应该在DevideNumbers上添加一个try catch区块,因为根据您提供的代码,您对该例外无所作为。你只需要捕捉的情况下,你打算用它做什么异常(日志例如错误)

的异常会泡了反正,这样你就不需要那么try catch

在主叫方法你在拨打DevideNumbers时会发现任何异常情况并发挥你的魔力。

0

这是我的建议。请注意我改变的一些东西并不是非常明显。

  • DivideNumbers返回double(你有它返回一个值,但该方法被标记为void
  • DivideNumbers投一个intdouble。一个intint划分始终是一个int。这可能会产生意想不到的结果,除非你想要/期望隐式舍入。
  • 异常处理是在不同的类中完成的,因为它看起来就是你想要的地方处理 it.IE什么是ca抛出一个例外,如果你唯一的意图是重新抛出它?只要让它起泡。

...

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. 
    }   
} 
相关问题