通过给定参数C#抛出异常

时间:2011-02-06 20:55:44

标签: c# exception methods

我想通过我给方法的参数创建一个抛出特定异常的方法。我有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 个答案:

答案 0 :(得分:4)

FWIW我认为这不是一个特别好的主意。真的,只要把你的异常抛到它发生的地方,代码的未来维护者会感谢你。 (或者至少不会诅咒你)

如果你必须做这件事,那么传递一个你可以打开的枚举而不是异常本身可能是个更好的主意,然后简单地写一个case语句来抛出你想要的异常。

答案 1 :(得分: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();
    }
);

答案 2 :(得分:2)

你实际上非常接近:

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

会工作,但我不推荐它有两个原因:

  1. 捕获Exception是一个坏主意 - 您应该抓住代码引发的异常。
  2. 这不是一个很好的设计(正如其他人指出的那样)。

答案 3 :(得分:0)

所以我没有看到任何问题...正如你所说你已经有自定义异常写了那么你可以这样做。

参数中的

private void ExceptionMethod(CustomException myexception)

in catch:

throw myexception;

虽然不是很好编码设计

答案 4 :(得分:0)

不会只是:

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

}