我有以下代码:
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"))
{
...
}
}
当我依赖我的代码中的异常消息时,我可以确定它是英文的吗?
答案 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;
}