以编程方式抑制C#中的异常

时间:2009-12-15 00:24:01

标签: c# exception exception-handling try-catch

我有以下try-catch语句,如果消息属性在文本中包含“我的错误”,我不想抛出异常。

我怎样才能在程序上实现这一目标?此外,这会被视为代码嗅觉吗?

try
{
}
catch(Exception e)
{
    if(e.Messages.Contains("My error"))
    {
       //want to display a friendly message and suppress the exception
    }
    else
    {
        throw e;
    }
}

4 个答案:

答案 0 :(得分:14)

您不应该根据错误测试捕获错误。您应该创建自己的异常类来扩展异常:

class MyErrorException : Exception { }

投掷并抓住那些。 (请原谅我的语法,如果它错了,我有一段时间没有做过C#。)

话虽如此,投掷和捕获自己的异常而不是传播它们是完全正常的,这就是你实际上应该如何进行异常处理。

答案 1 :(得分:11)

你应该抓住你正在寻找的特定例外。坦率地说,这段代码令人震惊。你应该有类似......

public class MyCoolException : Exception {
    public MyCoolException(string msg) : base(msg) {}
}

public void MyCoolMethod() {
    // if bad things happen
    throw new MyCoolException("You did something wrong!");
}

然后在您的代码中,您可以像...一样使用它。

try {
    MyCoolMethod();
} catch (MyCoolException e) {
    // do some stuff
}

答案 2 :(得分:7)

您的代码会产生可维护性问题,因为简单的文本更改可能会产生奇怪的副作用。您可以拥有自己的异常类,该类继承自System.Exception。然后,如果您可以执行以下操作,而不是:

try
{

}
catch(MyException myException) //or just catch(MyException)
{
    //display a friendly message
}

你也不想throw e,因为它不会保留堆栈,只有throw;会这样做。

答案 3 :(得分:0)

当我抛出异常而不是派生类时,我总是意味着一个失败的断言。我不喜欢在后端失败,因为我们仍然能够收到请求(只是不再那个)。如果我们真的敬酒,那么无论如何都会在下一个请求中出错。

当后端需要生成错误消息时,我有一个继承自Exception的ErrorMessage类,并将ErrorMessage和ErrorMessageTitle作为构造函数参数。