Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何处理来自同一异常对象的不同类型的异常?_C#_.net_Exception - Fatal编程技术网

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
}