Исключения: сравнить свойство сообщения, чтобы узнать, что оно означает? - PullRequest
2 голосов
/ 18 июля 2009

Иногда в приложении можно сравнить текст сообщения об исключении. Например, если

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

, тогда для пользователя отобразится MessageBox.

Это работает при тестировании в англоязычной системе Windows. Однако, когда программа запускается в системе с другим языком, это не будет работать. Как обеспечить использование только сообщений об исключениях на английском языке?

Ответы [ 3 ]

7 голосов
/ 18 июля 2009

Вы не можете гарантировать, что сообщение об исключении будет на английском языке; это зависит от настроек системы за вашим контролем.

Как правило, вы не должны анализировать сообщение об исключении, а скорее полагаться на исключение типов и, если они есть, коды ошибок (которые не зависят от языка).

Например, вместо того, чтобы перехватывать только один тип исключения и анализировать сообщение ...

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...
}
6 голосов
/ 18 июля 2009

Как заметил orsogufo, вы должны проверить тип исключения или код ошибки и никогда не пытаться анализировать сообщение об исключении (сообщение предназначено для пользователя, а не для программы).

В вашем конкретном примере вы можете сделать что-то вроде

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

(Вам необходимо определить точные номера ошибок для проверки.)

3 голосов
/ 18 июля 2009

Никогда парсит сообщение, предназначенное для чтения людьми.

Что, если они ошиблись в грамматике и в следующем выпуске изменили ее

Что, если они неправильно поняли грамматику, и в следующем выпуске они изменят ее.

Что если они неправильно поняли грамматику, а в следующем выпуске они изменят ее?

...