有時在應用程序中,可能會比較異常的消息文本。例如,如果異常情況:比較消息屬性知道它意味着什麼?
ex.Message.Contains("String or binary data would be truncated")
然後MessageBox將顯示給用戶。
這適用於在英文Windows系統上進行測試。但是,如果程序在使用不同語言設置的系統上運行,那麼這將不起作用。如何確保只使用英語異常消息?
有時在應用程序中,可能會比較異常的消息文本。例如,如果異常情況:比較消息屬性知道它意味着什麼?
ex.Message.Contains("String or binary data would be truncated")
然後MessageBox將顯示給用戶。
這適用於在英文Windows系統上進行測試。但是,如果程序在使用不同語言設置的系統上運行,那麼這將不起作用。如何確保只使用英語異常消息?
由於orsogufo指出,您應該檢查異常類型或錯誤代碼,並且絕不會嘗試解析異常消息(消息是針對用戶的,而不是針對程序的)。
在你的具體的例子,你可以不喜歡
try {
...
}
catch (SqlException ex)
{
if (ex.Number == 8152) MessageBox.Show(ex.Message);
}
(你必須要確定確切的錯誤號碼來檢查。)
您不能確保例外信息是英文的;它取決於您的控制背後的系統設置。
一般情況下,你不應該如果存在解析異常信息,而是依賴於例外類型和,錯誤代碼(這是語言無關)。
作爲一個例子,而不是捕捉只有一個例外類型和解析消息...
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...
}
決不解析的消息旨在供人類閱讀。如果
他們得到了錯誤的語法和下一個版本,他們改變它
如果他們得到了語法錯了,下一個版本,他們改變它。
如果他們的語法錯了,下一次發佈他們改變它會怎麼樣?
這是一個很好的觀點;) – Jeffrey 2009-07-18 15:57:58
目前我的號碼是8152,207和2627 – Jeffrey 2009-07-18 12:46:43