当我依赖我的代码中的异常消息时,我可以确定它是英文的吗?

时间:2016-02-26 15:44:48

标签: c#

我有以下代码:

if (smtpException != null)
{
    if (smtpException.InnerException.Message.Contains("net_io_connectionclosed"))
    {
        sendingFailedException = new EmailSendingFailedException(EmailsLocalization.EmailSendFailedWrongPortNumber, e);
    }

    if (smtpException.StatusCode == SmtpStatusCode.MustIssueStartTlsFirst || 
        smtpException.Message.Contains("AUTH"))
    {
        ...
    }
}

当我依赖我的代码中的异常消息时,我可以确定它是英文的吗?

3 个答案:

答案 0 :(得分:5)

一般来说:不,你不能 例如,.NET框架抛出的异常消息的语言取决于.NET框架的安装语言。 来自第三方库的消息通常可以使用任何语言。这些库也可以像.NET框架一样进行本地化。

但是,您在示例中检查的内容看起来不像人类可读文本,但更像是协议的一部分。这些关键字来自英语派生,但现在是他们自己的语言。该协议的语言。如果您从其他语言派生等效关键字,协议将不再有效,因此您可以确保关键字保持不变,无论运行应用程序的计算机的区域设置还是与之通信的服务器。

答案 1 :(得分:1)

据我所知,该消息始终在englis中,但您可以依赖Hresult数字而不是填写消息文本:

if(exception.HResult == somenumber){}

答案 2 :(得分:0)

你可以像这样处理它:

catch (Exception e){  
    var w32ex = e as Win32Exception;
    if(w32ex == null) {
        w32ex = e.InnerException as Win32Exception;
    }    
    if(w32ex != null) {
        int code =  w32ex.ErrorCode;
        // do some processing
    }    
    // do the rest of your exception handling  
}

或使用HResult

 catch (Exception ex){  
     int exCode = ex.HResult;
 }