我需要一个Exception
类,它将消息和int
作为参数,而宁愿使用现有的类而不是创建我自己的自定义派生异常。
我一直在寻找一个,但事实证明它比我想象的要困难。
是否有这样的(通常命名的)类?
修改
我打算抓住它并显示:"Error " + ex.Message + ex.Code.ToString();
。
错误代码用于消息,我宁愿不向用户显示。 (用于调试等的技术内容将显示错误代码 ,以便用户可以告诉我他得到了什么代码。)
我更喜欢现有Exception的原因是我希望在我的所有应用程序中都有统一的方法处理异常,而不必每次都定义它们。
答案 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; }
}