如何区分InvalidOperationException异常类型?

问题描述 投票:1回答:2

如何检测InvalidOperationException类型

这里是内部异常消息:

System.InvalidOperationException:ExecuteNonQuery需要打开且可用的连接。连接的当前状态已关闭。

我需要准确检测这种类型的异常以进行处理。我可以知道它的HResult编号或异常代码吗?还是其他方式?

c# exception try-catch invalidoperationexception
2个回答
0
投票

您可以使用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);
}

0
投票

您能给我们更多背景吗?这将使我们更容易回答您的问题。

但是,如果我对您的理解正确,您将尝试处理带有内部异常的“某物”。从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 }

© www.soinside.com 2019 - 2024. All rights reserved.