2

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

ex.Message.Contains("String or binary data would be truncated")

然后将为用户显示一个 MessageBox。

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

4

3 回答 3

7

您无法确保异常消息是英文的;这取决于您控制的系统设置。

通常,您不应解析异常消息,而应依赖异常类型错误代码(如果存在)(与语言无关)。

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

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...
}
于 2009-07-18T11:59:31.720 回答
6

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

在您的具体示例中,您可以执行类似的操作

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

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

于 2009-07-18T12:12:00.337 回答
3

永远不要解析旨在供人类阅读的消息。

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

如果他们弄错了语法怎么办,下一个版本他们会改变它。

如果他们把语法弄错了,下个版本又改了怎么办?

于 2009-07-18T12:18:28.153 回答