#c# #exception
#c# #исключение
Вопрос:
Я хочу создавать исключения, используя поля исключений. Должен ли я ввести метод конструктора исключений? Я продолжаю пытаться использовать их, но у меня это не получается. что мне делать?
»’
class AccountException : Exception
{
public string ACCOUNT_DOES_NOT_EXIST;
public string CREDIT_LIMIT_HAS_BEEN_EXCEEDED;
public string NAME_NOT_ASSOCIATED_WITH_ACCOUNT;
public string NO_OVERDRAFT;
public string PASSWORD_INCORRECT;
public string USER_DOES_NOT_EXIST;
public string USER_NOT_LOGGED_IN;
public AccountException() : base()
{
}
public AccountException(string type) : base()
{
// what should I do
}
}
public void Login(string password)
{
try
{
if (Convert.ToString(password.GetHashCode()) == this.password)
{
IsAuthenticated = true;
}
else if (Convert.ToString(password.GetHashCode()) != this.password)
{
throw new AccountException("PASSWORD_INCORRECT");
}
}
catch(AccountException e)
{
Console.WriteLine(e.Message);
}
}
»’
Комментарии:
1. Вы хотите получить исключение с сообщением «PASSWORD_INCORRECT «, когда ваша программа выдает ваш
AccountException("PASSWORD_INCORRECT")
?2. Да, это именно то, что я хочу
3. хорошо, итак, вы можете попробовать решение ниже 🙂
Ответ №1:
Если вы хотите получить класс исключений, который возвращает ваше сообщение (например, «PASSWORD_INCORRECT»), вы можете вызвать базовый конструктор с параметром message следующим образом:
public AccountException(string message) : base(message)
{
}
ПРИМЕЧАНИЕ: если я могу дать вам предложение, не используйте много строковых атрибутов, таких как:
public string ACCOUNT_DOES_NOT_EXIST;
public string CREDIT_LIMIT_HAS_BEEN_EXCEEDED;
public string NAME_NOT_ASSOCIATED_WITH_ACCOUNT;
public string NO_OVERDRAFT;
public string PASSWORD_INCORRECT;
public string USER_DOES_NOT_EXIST;
public string USER_NOT_LOGGED_IN;
Вместо этого создайте перечисление со всей доступной строкой, например:
class AccountException: Exception
{
public AccountException() : base()
{
}
public AccountException(AccountExceptionMessages message) : base(message.ToString())
{
}
}
public void Login(string password)
{
try
{
if (Convert.ToString(password.GetHashCode()) == this.password)
{
IsAuthenticated = true;
}
else if (Convert.ToString(password.GetHashCode()) != this.password)
{
throw new AccountException(AccountExceptionMessages.PASSWORD_INCORRECT);
}
}
catch(AccountException e)
{
Console.WriteLine(e.Message);
}
}
public enum AccountExceptionMessages
{
ACCOUNT_DOES_NOT_EXIST = 0,
CREDIT_LIMIT_HAS_BEEN_EXCEEDED = 1,
NAME_NOT_ASSOCIATED_WITH_ACCOUNT = 2,
NO_OVERDRAFT = 3,
PASSWORD_INCORRECT = 4,
USER_DOES_NOT_EXIST = 5,
USER_NOT_LOGGED_IN = 6,
}