Tom*_*mas 35 c# exception-handling
我已经创建了自定义异常类
public class Web2PDFException : Exception
{
public Web2PDFException(string message,
Exception innerException)
: base(message, innerException)
{
}
}
Run Code Online (Sandbox Code Playgroud)
在我的应用程序中,我想找出抛出异常是我的自定义异常与否.
try
{
}
catch (Exception err)
{
//Find exception type here
}
Run Code Online (Sandbox Code Playgroud)
Osk*_*uro 60
在处理我不确切知道方法可能出现什么类型的异常的情况时,我喜欢做的一点"技巧"是恢复Exception的类名并将其添加到错误日志中以便有更多信息.
try
{
<code>
} catch ( Exception caughtEx )
{
throw new Exception("Unknown Exception Thrown: "
+ "\n Type: " + caughtEx.GetType().Name
+ "\n Message: " + caughtEx.Message);
}
Run Code Online (Sandbox Code Playgroud)
我保证总是单独处理异常类型,但额外的信息可能会有所帮助,特别是在处理喜欢捕获全部通用类型的人的代码时.
Rub*_*ink 45
更新:假设C#6,您的情况可能表示为异常过滤器.从性能角度来看,这是理想的方法,假设您的需求可以用它来表达,例如:
try
{
}
catch ( Web2PDFException ex ) when ( ex.Code == 52 )
{
}
Run Code Online (Sandbox Code Playgroud)
假设C#<6,最有效的方法是捕获特定Exception类型并根据它进行处理.任何包罗万象的处理都可以单独完成
try
{
}
catch ( Web2PDFException ex )
{
}
Run Code Online (Sandbox Code Playgroud)
要么
try
{
}
catch ( Web2PDFException ex )
{
}
catch ( Exception ex )
{
}
Run Code Online (Sandbox Code Playgroud)
或者(如果你需要写一个通用的处理程序 - 这通常是一个坏主意,但如果你确定它最适合你,你肯定):
if( err is Web2PDFException)
{
}
Run Code Online (Sandbox Code Playgroud)
或者(在某些情况下,如果你需要做一些不能表达的更复杂的类型层次结构的东西is)
if( err.GetType().IsAssignableFrom(typeof(Web2PDFException)))
{
}
Run Code Online (Sandbox Code Playgroud)
或切换到VB.NET或F#并使用is或Type.IsAssignableFrom在异常过滤器中
bat*_*wad 16
try
{
// Some code
}
catch (Web2PDFException ex)
{
// It's your special exception
}
catch (Exception ex)
{
// Any other exception here
}
Run Code Online (Sandbox Code Playgroud)
try
{
}
catch (Exception err)
{
if (err is Web2PDFException)
DoWhatever();
}
Run Code Online (Sandbox Code Playgroud)
但是可能有更好的方法来做任何你想要的事情.