查看代码评论中的问题。
我有两节课。
这是主要的类(第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 :(得分: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();
}
}
}
答案 1 :(得分: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;
}
}
}
答案 2 :(得分:1)
删除你的DevideNumbers方法中的try catch,我没有用,因为你没有抓到任何东西。最好将try catch int放在btnProcessImages_Click方法中,然后在那里添加错误处理。
答案 3 :(得分:0)
首先,您不应在try catch
上添加DevideNumbers
块,因为根据您提供的代码,您对该例外无效。您只需要捕获异常,以防计划对其执行某些操作(例如记录错误)
异常会冒泡,所以你不需要try catch
阻止
在调用者方法上,您可以在调用DevideNumbers
时捕获任何异常并做出您的魔法。
答案 4 :(得分:0)
这是我的建议。请注意我改变的一些不太明显的事情。
double
(您返回了一个值,但该方法已标记为void
。int
投放到double
中的DivideNumbers
。 int
除以int
始终为int
。这可能会产生意外结果,除非您希望/期望隐式舍入。...
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.
}
}