gac*_*epa 2 c# exception-handling try-catch
我有一个我一直在思考的基本问题.
请参阅以下使用try/catch块的代码段:
public void doSomething()
{
try
{
doSomethingElse()
}
catch (Exception ex)
{
if (ex is IndexOutOfRangeException || ex is DivideByZeroException || ex is Exception)
{
Console.WriteLine(ex.Message);
}
}
}
Run Code Online (Sandbox Code Playgroud)
1)如果我想要做的就是将异常消息输出到控制台,是否有必要检查if子句我得到的异常类型,或者我可以做什么
...
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
...
Run Code Online (Sandbox Code Playgroud)
2)我的理解是,如果我需要将已定义的消息输出到控制台而不是使用异常消息本身,则应该使用检查特定的异常类型 -
...
catch (Exception ex)
{
switch (ex):
{
case IndexOutOfRangeException:
Console.WriteLine("Personalized message #1");
break;
case DivideByZeroException:
Console.WriteLine("Personalized message #2");
break;
case Exception:
Console.WriteLine("Personalized message #3");
break;
}
}
...
Run Code Online (Sandbox Code Playgroud)
您对1)和2)的评论非常感谢.谢谢你的时间.
1)如果我想要做的就是将异常消息输出到控制台,是否有必要检查if子句我得到的异常类型
如果您只想显示其消息,则无需检查每种异常类型.只需使用Exception.Message财产.
2)我的理解是,如果我需要将已定义的消息输出到控制台而不是使用异常消息本身,则应该使用检查特定的异常类型
而是捕获基本异常,然后将每个异常与不同类型进行比较,首先捕获特定异常,然后在每个catch块中最后定位
try
{
}
catch (IndexOutOfRangeException indexOutOfRangeException)
{
//Specific handling
}
catch (DivideByZeroException divideByZeroException)
{
//Specific handling
}
catch (Exception ex)
{
//Exception handling for all other cases
}
Run Code Online (Sandbox Code Playgroud)