0

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

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

有这样的(一般命名的)类吗?

编辑

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

错误代码是针对我不希望向用户显示的消息。(调试技术等。将显示错误代码 ,以便用户告诉我他得到了什么代码。)

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

4

3 回答 3

5

如前所述,最好的方法是为您的应用程序域创建 1 个或多个特殊的异常类。一个好的设计还包括优雅分解的规定。

但是还有另一条路线,基 Exception 类的很少使用的Data属性

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

try 
{
    using (var reader = File.OpenText(fileName))
    { 
       ... 
    }
}
catch(Exception e)
{
   e.Data.Add("Filename", fileName);
   throw;
}
于 2013-06-16T21:08:22.120 回答
2

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

由于您想传入一个整数值,我假设您想在某处捕获该特定异常。如果您对该异常没有任何特定处理,则使用特定异常是没有用的;您可以使用任何正常的异常,例如InvalidOperationException值是异常消息的一部分。

因此,由于您要专门处理该异常,因此重用现有异常之一是不明智的,因为框架或其他第三方工具可能会抛出这些异常,因此很难区分您使用的异常和其他抛出的异常。

于 2013-06-16T21:03:16.177 回答
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; }
}
于 2013-06-16T21:09:41.010 回答