在这种情况下,是否有任何理由使用特定的实验类MyException1
和MyException2
?
public static void Main()
{
try
{
TestMethod();
}
catch(Exception ex)
{
Console.Writeline(ex);
}
}
private static void TestMethod()
{
// This method can throw Exception1 and Exception2
}
public class MyException1 : Exception {}
public class MyException2 : Exception {}
我知道在每种异常类型都有多个catch块的情况下这是有意义的。但是在这种情况下,MyException1
和MyException2
相似为空。这些引发的异常将在Main方法中强制转换为Exception类。也许最好不要用这种处理方法创建两个类似的Exception类?
答案 0 :(得分:2)
catch
块后面的概念是您 处理 。如果某种类型的异常需要某种类型的处理,则该异常具有自己的类时会很有帮助,因此它可以具有自己的catch
块。
例如,如果MyException1
致命时可以安全地吞下MyException2
,则可以这样写:
try
{
DoSomethingHard();
}
catch (MyException1 exception1)
{
_log.Write("Warning: small exception, no worries. {0}", exception1.Message);
continue;
}
catch (MyException2 exception2)
{
_log.Write("Fatal: big exception, gotta bail out now. {0}", exception2.Message);
break;
}
答案 1 :(得分:0)
例外应该广泛而不是深入。每个都有一个不同的例外,嗯...例外。
您的示例并未真正显示出很好的示例。也许更像是:
public static void Main()
{
try
{
TestMethod();
}
catch(Exception ex)
{
Console.Writeline(ex);
}
}
private static void TestMethod()
{
if(..bad configuration)
throw new ConfigurationException("configuration item");
if(missing file)
throw new FileMissingException("filename");
// This method can throw Exception1 and Exception2
}
public class ConfigurationException : Exception {}
public class FileMissingException : Exception {}
答案 2 :(得分:0)
如果您使用的是ASP.NET,那么它是如此常见,以至于您创建并使用了自己的Exception处理程序,在这种情况下,您可以只考虑一种方法中每种异常的特定行为(而不是在每个容易出错的代码中捕获块)块),请看以下简单示例:
public class MyExceptionHandler : ExceptionHandler
{
public override void Handle(ExceptionHandlerContext context)
{
if (context.Exception is SqlException)
{
//do something...
}
else if (context.Exception is HttpListenerException)
{
//do something...
}
else
{
//do something else...
}
}
}