2011-02-06 1 views
0

Я хочу создать метод, который генерирует конкретное исключение по параметру, который я даю методу. У меня есть 3 пользовательских исключения, поэтому вместо того, чтобы бросать их каждый раз, когда я хочу их использовать, я хочу создать метод, который передает его, поэтому параметр, который я предоставляю с помощью моего метода, является исключением, которое я хочу бросить, но как мне сделай это?Выбросить исключение с помощью метода по заданному параметру C#

Я хочу сделать что-то подобное, но я не уверен, как это сделать.

private void ExceptionMethod(custom exception) 
{ 
    try 
    { 
     //code that might fail 
    } 
    catch(exception ex) 
    { 
     throw new exception given by parameter(parameters from the exception); 
    } 

} 
+1

То, что вы хорошо выглядит. Что не хватает? – bzlm

ответ

2

Вы на самом деле были довольно близки:

private void ExceptionMethod(Exception customException) 
{ 
    try 
    { 
     //code that might fail 
    } 
    catch(Exception ex) 
    { 
     throw customException; 
    } 
} 

будет работать, хотя я бы не рекомендовал его по двум причинам:

  1. Ловля Exception является плохая идея - вы должны просто поймать исключения, которые повышает ваш код.
  2. Это не очень хороший дизайн (как указывали другие).
+0

ОК, спасибо :) –

4

FWIW Я не думаю, что это особенно хорошая идея. На самом деле, просто бросьте свое исключение, когда это произойдет, будущие разработчики кода будут вам благодарны. (или, по крайней мере, не проклинать вас)

Если вам нужно сделать это, то, вероятно, лучше перечислить перечисление, которое вы можете включить, а не само исключение, а затем просто написать оператор case, чтобы исключение, которое вы хотите.

+0

+1 хорошее объяснение ... –

0

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

в вашем параметре:

private void ExceptionMethod(CustomException myexception) 

в улове:

throw myexception; 

хотя его не хорошая кодирования Дизайн

4

Помимо того, что это звучит как плохая идея, вы можете попробовать следующее:

private void TryElseThrow<TCustomException>(Action codeThatMightFail) 
    where TCustomException : Exception 
{ 
    try 
    { 
     codeThatMightFail(); 
    } 
    catch (Exception e) 
    { 
     // Since there isn't a generic type constraint for a constructor 
     // that expects a specific parameter, we'll have to risk it :-) 
     throw 
      (TCustomException)Activator 
      .CreateInstance(typeof(TCustomException), e); 
    } 
} 

Использование так:

TryElseThrow<MyCustomException>(
    () => 
    { 
     throw new InvalidOperationException(); 
    } 
); 
+0

О, мальчик, я выбрасывал «TCustomerException». Нужно больше спать ... –

0

Не было бы просто:

private void ExceptionMethod(MyCustomException exception) 
{ 
    try 
    { 
     //code that might fail 
    } 
    catch 
    { 
     throw exception; 
    } 

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