Сгенерировать исключение методом с заданным параметром C # - PullRequest
0 голосов
/ 06 февраля 2011

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

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

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

}

Ответы [ 5 ]

4 голосов
/ 07 февраля 2011

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

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();
    }
);
4 голосов
/ 07 февраля 2011

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

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

2 голосов
/ 07 февраля 2011

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

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

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

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

Не будет ли это просто:

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

}
0 голосов
/ 07 февраля 2011

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

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

private void ExceptionMethod(CustomException myexception)

в улове:

throw myexception;

хотя его не очень хороший Coding Design

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...