c# - 如何处理来自同一个异常对象的不同类型的异常?

标签 c# .net exception

例如,套接字异常可以返回超时相关消息或“主动拒绝”消息,这通常是由关闭的端口/用于其他用途的端口引起的。

我将如何基于此正确地做一个 switch case?
我可以只做一个 ex.Message.Contains() 但如果它在非英语系统上运行,消息将不是英语所以 .Contains() 不会匹配。
是否有某种我可以检查的签名或某种全局且不会更改的异常代码?

最佳答案

如果你正确使用try-catch,即:

try
{
    ...
}
catch (SocketException ex) // this should have an s at the beginning...
{

}

您可以使用 Visual Studio 功能来获取它(编写 switch (ex.SocketErrorCode) 并按 tab):

switch (ex.SocketErrorCode)
{
    case SocketError.AccessDenied:
        break;
    case SocketError.AddressAlreadyInUse:
        break;
    case SocketError.AddressFamilyNotSupported:
        break;
    case SocketError.AddressNotAvailable:
        break;
    case SocketError.AlreadyInProgress:
        break;
    case SocketError.ConnectionAborted:
        break;
    case SocketError.ConnectionRefused:
        break;
    case SocketError.ConnectionReset:
        break;
    // some dozens more
    default:
        break;
}

可以看到the docs找到您想要控制的任何情况。

关于c# - 如何处理来自同一个异常对象的不同类型的异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52599551/

相关文章:

.net - 将 .NET DateTime 值传递给 SAP PI xsd :Date

android - 使用未捕获的异常处理程序时应用程序崩溃导致应用程序停止

c++ - 捕获 boost 异常

c# - 当我在 WPF Mvvm 中按下按钮时,如何在 DataGrid 中显示数据?

c# - 图像与位图图像与位图

c# - 为什么 hashset.exceptwith 迭代和检查 !contains 的速度是另一个集合的两倍?

c# - 异常与特殊返回值

c# - 对于异步操作,我应该用什么替换 IQueryable?

c# - 如何防止打印屏幕

.net - VB.Net 'Sub Main' 未找到