C# 例外:比较消息属性以了解其含义?

C# 例外:比较消息属性以了解其含义?,c#,exception,exception-handling,multilingual,C#,Exception,Exception Handling,Multilingual,有时在应用程序中,可以比较异常的消息文本。例如,如果 ex.Message.Contains("String or binary data would be truncated") 然后将为用户显示一个消息框 在英语Windows系统上进行测试时,此功能有效。但是,当程序在具有不同语言集的系统上运行时,这将不起作用。如何确保仅使用英语异常消息?您无法确保异常消息使用英语;这取决于控件后面的系统设置 一般来说,您不应该解析异常消息,而应该依赖异常类型,如果存在,则依赖于错误代码(与语言无关) 例

有时在应用程序中,可以比较异常的消息文本。例如,如果

ex.Message.Contains("String or binary data would be truncated")
然后将为用户显示一个消息框


在英语Windows系统上进行测试时,此功能有效。但是,当程序在具有不同语言集的系统上运行时,这将不起作用。如何确保仅使用英语异常消息?

您无法确保异常消息使用英语;这取决于控件后面的系统设置

一般来说,您不应该解析异常消息,而应该依赖异常类型,如果存在,则依赖于错误代码(与语言无关)

例如,与其只捕获一种异常类型并解析消息,不如

try {
    do_something();
} catch (Exception exc) { 
    if (exc.Message.Contains("String or binary data would be truncated"){
        MessageBox.Show("An error occurred...");
    }
}
…您可以使用多个异常处理程序:

try {
    do_something();
} catch (SqlException sql) { 
    MessageBox.Show("An error occurred...");
} catch (SomeOtherException someExc){
    // exception-specific code here...
} catch (Exception exc) { 
    // most generic error...
}

正如orsogufo所指出的,您应该检查异常类型或错误代码,并且永远不要尝试解析异常消息(该消息是针对用户的,而不是针对程序的)

在您的特定示例中,您可以执行以下操作

try {
    ...
}
catch (SqlException ex)
{
    if (ex.Number == 8152) MessageBox.Show(ex.Message);
}

(您必须确定要检查的确切错误号。)

永远不要解析为人类阅读而设计的消息

如果他们把语法搞错了,下一个版本他们会修改它怎么办

如果他们把语法搞错了,下一个版本他们会修改它


如果他们把语法搞错了,下一个版本他们会修改吗?

目前我的号码是8152、207和2627