C# 如何处理来自同一异常对象的不同类型的异常?
例如,套接字异常可以返回超时相关消息或“主动拒绝”消息,这通常是由用于其他内容的关闭端口/端口引起的 在此基础上,我如何正确地制作开关盒?C# 如何处理来自同一异常对象的不同类型的异常?,c#,.net,exception,C#,.net,Exception,例如,套接字异常可以返回超时相关消息或“主动拒绝”消息,这通常是由用于其他内容的关闭端口/端口引起的 在此基础上,我如何正确地制作开关盒? 我可以只做一个ex.Message.Contains(),但是如果它在非英语系统上运行,消息将不是英语的,因此.Contains()将不匹配。 是否有某种我可以检查的签名或某种全局且不会更改的异常代码?如果您正确使用try catch,即: try { ... } catch (SocketException ex) // this should h
我可以只做一个
ex.Message.Contains()
,但是如果它在非英语系统上运行,消息将不是英语的,因此.Contains()
将不匹配。是否有某种我可以检查的签名或某种全局且不会更改的异常代码?如果您正确使用
try catch
,即:
try
{
...
}
catch (SocketException ex) // this should have an s at the beginning...
{
}
您可以使用Visual Studio功能来获取此信息(写入开关(例如SocketErrorCode)
并按tab键):
您可以查看以找到您想要控制的任何情况。特别是对于套接字异常,您可以通过
SocketException.ErrorCode
属性获取套接字错误代码,然后打开该属性。我喜欢使用发布的枚举
但从更广泛的意义上说,我认为你看错了。没有“通用”或“通用”方法来处理自定义字段的异常。从继承的角度来看,您唯一可以依赖的字段是从Exception
继承的字段。如果您处理的类继承自异常
,那么您应该专门为该异常编写代码
请记住,您可以始终使用异常类型进行条件处理:
try
{
...
}
catch(SocketException sockex)
{
...
}
catch(Exception ex)
{
...
}
您可以将套接字异常与任何其他异常分开,如下所示:
try
{
// Your socket based code
}
catch (SocketException e)
{
// Handle Socket Exception
}
catch (Exception e)
{
// Handle Any other exception
}
此外您可以检查HResult属性,查看是否可以根据所获得的错误类型获得不同的值。属性是否不同?是否确实需要处理这些不同的情况?只需返回给用户,他必须重试并发送消息。超时和被拒绝是很清楚的,我不知道除了重试几次,你还可以通过编程做些什么,然后无论如何,你还是要把它扔给用户来选择退出或继续重试。非常感谢你没有发现这一点!
try
{
// Your socket based code
}
catch (SocketException e)
{
// Handle Socket Exception
}
catch (Exception e)
{
// Handle Any other exception
}