认为我可以编写一个void函数来接受Exception并输出catch块通常会产生的东西是否合理?这是我的例外捕手的一个例子(我会为我处理的常见例外制作个别例子):
private void exCatch(Exception ex)
{
MessageBox.Show("ERROR - " + blah blah blah + ex.ToString(), blah blah);
}
这是实践中的:
try
{
stuff
}
catch (Exception e)
{
exCatch(e);
}
这是处理异常的有效方法吗?如果这是合理的,人们会这样做吗?看起来它可以加快编码速度而不必一遍又一遍地复制粘贴所有异常垃圾。谢谢你的帮助!
答案 0 :(得分:2)
根本没有问题。事实上,添加函数以减少代码重复是绝对可取的。然后,如果你想改变说消息框按钮你改变它一次,你到处都做。
需要注意的是,您应该考虑仅捕获您期望的某些类型的异常。如果您正在捕捉异常,那应该是因为您知道它来自何处以及究竟该如何处理它。否则,您可能会抓住应该在更高级别处理的内容,并且您的应用可能会进入无效状态。这是一个例子。
ArgumentNullException
FormatException
OverflowException
Int32.Parse(string)抛出的异常。让我们说你知道你不会传递Null这是MSDN表明你应该如何处理这个功能:
using System;
public class Example
{
public static void Main()
{
string[] values = { "+13230", "-0", "1,390,146", "$190,235,421,127",
"0xFA1B", "163042", "-10", "007", "2147483647",
"2147483648", "16e07", "134985.0", "-12034",
"-2147483648", "-2147483649" };
foreach (string value in values)
{
try {
int number = Int32.Parse(value);
Console.WriteLine("{0} --> {1}", value, number);
}
catch (FormatException) {
Console.WriteLine("{0}: Bad Format", value);
}
catch (OverflowException) {
Console.WriteLine("{0}: Overflow", value);
}
}
}
}
https://msdn.microsoft.com/en-us/library/b3h1hf19(v=vs.110).aspx
始终查找方法可以抛出的异常,并始终记录您正在捕获并抛出方法的异常。