是否有一个普通的Exception类,除了消息之外还需要一个int?

时间:2013-06-16 20:57:30

标签: c# .net exception

我需要一个Exception类,它将消息和int作为参数,而宁愿使用现有的类而不是创建我自己的自定义派生异常。

我一直在寻找一个,但事实证明它比我想象的要困难。

是否有这样的(通常命名的)类?

修改

我打算抓住它并显示:"Error " + ex.Message + ex.Code.ToString();

错误代码用于消息,我宁愿不向用户显示。 (用于调试等的技术内容将显示错误代码 ,以便用户可以告诉我他得到了什么代码。)

我更喜欢现有Exception的原因是我希望在我的所有应用程序中都有统一的方法处理异常,而不必每次都定义它们。

3 个答案:

答案 0 :(得分:5)

如前所述,最好的事情是为您的Application Domain创建一个或多个特殊的Exception类。一个好的设计还包括优雅地打破的条款。

但还有另一条路线,很少使用基础Exception类的Data property

它是一个词典,允许您将自定义数据添加到任何异常。拦截(捕获和重新抛出)异常并想要添加一些环境信息时很有用。

try 
{
    using (var reader = File.OpenText(fileName))
    { 
       ... 
    }
}
catch(Exception e)
{
   e.Data.Add("Filename", fileName);
   throw;
}

答案 1 :(得分:2)

绝对存在这样做的例外情况,但仍然明确自己定义。

由于你想传​​入一个整数值,我假设你想在某个地方捕获那个特定的异常。如果您对该例外没有任何具体处理,则使用特定例外将毫无用处;您可以使用任何正常的异常,例如InvalidOperationException,其中值是异常消息的一部分。

因此,由于您希望特别处理该异常,重复使用现有异常之一是不明智的,因为框架或其他第三方工具可能会抛出这些异常,因此很难区分您的异常和其他异常。< / p>

答案 2 :(得分:2)

例外的目的是报告异常行为。由于不期望异常,因此它的名称应该是自描述的。因此,该属性不是重要的,而是异常的名称。

因此,只需创建一个具有有意义名称的新异常并添加int属性。

public class InvalidNumberException : System.Exception
{
    public InvalidNumberException() : base() { }
    public InvalidNumberException(string message) : base(message) { }
    public InvalidNumberException(string message, int number) : this(message, null, number) { }
    public InvalidNumberException(string message, System.Exception inner) : base(message, inner) { }
    public InvalidNumberException(string message, System.Exception inner, int number) : base(message, inner)
    {
        this.Number = number;
    }
    public int Number { get; set; }
}