2013-08-31 3 views
0

Я создал custom-exception, который я хочу бросить всякий раз, когда пользователь вводит секс, который является либо мужчиной женского пола. Я сделал это с помощьюСделать автоматический выбор исключений

class sexException : Exception 
{ 
    public override string Message 
    { 
     get 
     { 
      return "Sex can only be either MALE or FEMALE"; 
     } 
    } 
} 

Теперь, когда я хочу бросить exception в моем главном приложении, я должен будет создать объект, за исключением, а затем проверить значение, прежде чем выбросить исключение.

Что-то вроде

public static void AcceptInfo() 
    { 
     Console.Write("Enter Sex : "); 
     string sex = Console.ReadLine(); 
     if (sex.ToUpper() != "MALE" && sex.ToUpper() != "FEMALE") 
     { 
      try 
      { 
       sexException ne = new sexException(); 
       throw ne; 
      } 
      catch (sexException e) 
      { 
       Console.WriteLine(e.Message); 
      } 
     } 
    } 

Мой Вопрос; как я могу создать таким образом, чтобы он автоматически выдавал, когда пользователь вводит неверные данные, не требуя просто проверить, недействительны ли данные, например FormatException по типу данных int.

ответ

1

Исключения обычно используются для исключительных обстоятельств. В зависимости от вашего пользовательского интерфейса на самом деле невозможно выбрать что-то отличное от male или female, что означало бы, что было бы неплохо проверить.

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

if(!sex.Equals("male", StringComparison.OrdinalIgnoreCase) 
    && !sex.Equals("female", StringComparison.OrdinalIgnoreCase)) 
{ 
    Console.WriteLine("Sex can only be either MALE or FEMALE"); 
} 

Путь FormatException и другие исключения выбрасываются похожа на то, что вы сделали, но они не сразу справиться с этим, как вы. Таким образом, в теории, они делают что-то вроде этого

if (sex.ToUpper() != "MALE" && sex.ToUpper() != "FEMALE") 
{ 
    throw new sexException(); 
} 

Независимо часть кода называется этот метод, например, можно было бы ожидать, чтобы обработать это исключение в блоке try...catch.

+0

+1. Спасибо за разъяснения. Мне нужно было создать исключение, потому что оно было задано как упражнение под темой «создание пользовательских исключений» –

+1

В этом случае это прекрасно :) Если это для учебных целей, продолжайте и обходите это, но читайте, когда следует использовать исключения. На SO есть несколько потоков, но также и эта статья MSDN, которая может помочь http://msdn.microsoft.com/en-us/library/ms173161.aspx – keyboardP

+1

. Добро пожаловать :) – keyboardP

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