如何区分 InvalidOperationException 异常类型?
How to differentiate between InvalidOperationException exception types?
如何检测 InvalidOperationException 类型
这是内部异常消息:
System.InvalidOperationException: ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
我需要准确地检测到这种类型的异常来处理它。
我可以知道它的 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);
}
你能给我们更多的背景信息吗?这将使我们更容易回答您的问题。
但是,如果我理解正确的话,您尝试使用内部异常处理 'something'。从 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 (InvalidOperationException ex) when (ex.InnerException is AnotherSomeTypeOfException)
{
// Handle this kind of exception
}
此代码可能有帮助
try
{
//your code here...
}
catch (Exception exception) when (exception.InnerException is InvalidOperationException)
{
var exceptionMessage = "ExecuteNonQuery requires an open and available Connection";
if (exception.Message.Contains(exceptionMessage) || exception.InnerException.Message.Contains(exceptionMessage))
{
//handle it...
}
}
如何检测 InvalidOperationException 类型
这是内部异常消息:
System.InvalidOperationException: ExecuteNonQuery requires an open and available Connection. The connection's current state is closed.
我需要准确地检测到这种类型的异常来处理它。 我可以知道它的 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);
}
你能给我们更多的背景信息吗?这将使我们更容易回答您的问题。
但是,如果我理解正确的话,您尝试使用内部异常处理 'something'。从 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 (InvalidOperationException ex) when (ex.InnerException is AnotherSomeTypeOfException)
{
// Handle this kind of exception
}
此代码可能有帮助
try
{
//your code here...
}
catch (Exception exception) when (exception.InnerException is InvalidOperationException)
{
var exceptionMessage = "ExecuteNonQuery requires an open and available Connection";
if (exception.Message.Contains(exceptionMessage) || exception.InnerException.Message.Contains(exceptionMessage))
{
//handle it...
}
}