在这种情况下,我应该抛出哪种.Net 2.0异常?

时间:2009-06-24 16:02:10

标签: c# exception

我正在为一家公司编写另一个ActiveRecord实现,该公司对我的代码不那么害怕,而不是在CastleProject的实现上命名为“Release Candidate”。无论如何,我在基类的每个属性上使用Attributes将它们映射到返回的DataSet列:

[ResultColumnAttribute("CUST_FIRST_NAME")]
public string FirstName
        {
            get { return _columnName; }
            set { _columnName = value; }
        }

这样当我从DataSet实例化该类时,我将该属性值赋值为该列的值。当列与属性映射但未显示在DataSet中时,我应该抛出什么异常?我不想去写一个自定义的(懒惰的),我认为Application.Exception有点不起眼。

6 个答案:

答案 0 :(得分:8)

此异常已本地化到您的域名,因此我认为您最好自己编写InvalidMappingException

以下是我的写作方式:

[Serializable]
public class InvalidMappingException : Exception
{
    public InvalidMappingException() { }

    public InvalidMappingException(String message)
        : base(message) { }

    public InvalidMappingException
        (String message, Exception innerException)
            : base(message, innerException) { }

    protected InvalidMappingException
        (SerializationInfo info, StreamingContext context)
            : base(info, context) { }
}

答案 1 :(得分:2)

我认为没有理由不使用InvalidOperationException。请记住,除非您的调用者会对您的异常执行某些编程操作,否则异常类型无关紧要。例如,如果他们要明确地捕获它,或引用您的异常的某些属性,那么您需要自己的属性。

否则,内置异常会很好。


How to Design Exception Hierarchies的合着者Krzysztof Cwalina见Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries

答案 2 :(得分:1)

我会编写一个特定于您的实现的自定义异常。这是一个非常具体的自定义情况,自定义异常可能比其他任何东西都更合适。

对我而言,在这种情况下,(lazy)不足以避免在保证时添加自定义异常所需的一小部分代码......

答案 3 :(得分:1)

由于“抛出新的异常”现在是正式的坏样式并且时尚,我为所有错误抛出InvalidOperationException(“描述性消息”)我懒得为自己编写自定义错误。

答案 4 :(得分:0)

首先,Castle Windsor现在正式版本2,没有发布候选人:)

我认为.NET框架中只有一组有限的异常,你可以从代码中抛出:

  • NotImplementedException
  • 出现InvalidOperationException
  • 的ArgumentException
  • ArgumentNullException
可能还有更多,我希望其他帖子。如果它们都不适合你应该自己编写。使用Visual Studio中的“exc”代码片段,懒惰并不是真正的争论。

答案 5 :(得分:0)

同意你应该自己编写(哎呀,只需键入异常并按Tab键,编辑器就可以完成2/3的工作!),但如果没有,我可能会选择ArgumentException