如何检测InvalidOperationException类型
这里是内部异常消息:
System.InvalidOperationException:ExecuteNonQuery需要打开且可用的连接。连接的当前状态已关闭。
我需要准确检测这种类型的异常以进行处理。我可以知道它的HResult编号或异常代码吗?还是其他方式?
您可以使用try / catch异常处理层次结构,以便首先捕获InvalidOperationException并与其他异常类型(例如通用异常类型)分开进行处理。
try
{
// Normal workflow up here
}
catch (System.InvalidOperationException ioex)
{
// Handle InvalidOperationException
Console.WriteLine(ioex.StackTrace);
}
catch (System.Exception ex)
{
// Handle generic exception
Console.WriteLine(ex.StackTrace);
}
但是,您的问题表明这对您不起作用,因为您提到了内部例外。在这种情况下,您可能需要像这样对内部异常进行某种类型检查:
try
{
// Normal workflow up here
}
catch (System.Exception ex)
{
if (ex.InnerException is InvalidOperationException)
{
// Handle InvalidOperationException
}
else
{
// Handle generic exception
}
Console.WriteLine(ex.StackTrace);
}
您能给我们更多背景吗?这将使我们更容易回答您的问题。
但是,如果我对您的理解正确,您将尝试处理带有内部异常的“某物”。从C#6开始,提供了[[例外过滤器。有关异常过滤器的更多信息,请参见Exception filters。该文档还提供了一个示例。
在您的特定情况下,可以如下使用异常过滤器:
try
{
// Do something that could cause a InvalidOperationException
}
catch (InvalidOperationException ex) when (ex.InnerException is SomeTypeOfException)
{
// Handle this type of exception
}
catch (TargetInvocationException ex) when (ex.InnerException is AnotherSomeTypeOfException)
{
// Handle this kind of exception
}