2015-07-12 4 views
2

Мне нужно изменить конкретное сообщение о системном исключении с моим пользовательским.C# Вывод исключения из сообщения

Неправильная практика, чтобы поймать исключение, и внутри блока catch проверить, соответствует ли сообщение системного исключения конкретной строке, и если да, то выкиньте мое обычное исключение?

try 
{ 
    ... 
} 
catch (System.Security.Cryptography.CryptographicException ex) 
{ 
    if (ex.Message.Equals("The specified network password is not correct.\r\n", StringComparison.InvariantCultureIgnoreCase)) 
     throw new Exception("Wrong Password"); 
    else 
     throw ex; 
} 

Или есть лучший способ достичь этого.

+0

'if (ex.Message ==" ... ")' будет работать только на английском языке. –

+0

Под этим вы подразумеваете, что если пользователь из Испании, например, исключение C# будет другим? Я думал, что это зависит от локали сервера. – Loves2Develop

+0

Сообщение устанавливается везде, где выбрано исключение ... И там язык должен быть 'en'. –

ответ

6

Нет ничего неправильного в том, чтобы выбросить исключение с помощью инструкции catch. Однако есть несколько вещей, которые нужно иметь в виду:

Повторите исключение, используя «throw», а не «throw ex», иначе вы потеряете трассировку стека.

От Creating and Throwing Exceptions.

Не бросайте System.Exception, System.SystemException, System.NullReferenceException или System.IndexOutOfRangeException намеренно от собственного исходного кода.

Если CrytographicException действительно не подходит для вас, вы можете создать специальный класс исключений для представления неверный пароль:

try 
{ 
    ... 
} 
catch (System.Security.Cryptography.CryptographicException ex) 
{ 
    if (ex.Message.Equals("The specified network password is not correct.\r\n", 
      StringComparison.InvariantCultureIgnoreCase)) 
     throw new InvalidPasswordException("Wrong Password", ex); 
    else 
     throw; 
} 

Обратите внимание, как сохраняется оригинальное исключение в новом InvalidPasswordException.

Смежные вопросы