.NET:未设置必需属性时抛出哪个异常?

参见英文答案 > Is there a built in .NET exception that indicates an illegal object state?                                    3个
假设我有这样一个类:

public class Foo
{
    public Bar RequiredProperty { get; set;}

    public void Baz()
    {
        if (this.RequiredProperty == null)
        {
            // Which exception should I throw?
        }
    }
}

我的解决方案有一个专门设计用于重用的类,而不必一次又一次地将大量参数传递给Bar方法.那么,当Bar未初始化为非null值时,我应该抛出什么?

更多信息
我基本上是在编写自己的代码解析器和格式化程序.称之为对象课程.其中一个类是HtmlCodeFormatter,它具有以下属性(为了纪念依赖注入):

public IFormatter Formatter { get; set; }
public IParser Parsre { get; set; }

这允许我编写任意数量的特定于语言的解析器和格式化程序.例如,我有一个CSharpParser和一个JavascriptParser.我也有一个HtmlCodeFormatter,并且计划另一个(可疑的实用程序).

这个想法是你可以使用对象初始化器来实例化HtmlFormatter,如下所示:

var formatter = new HtmlCodeFormatter()
    {
        Parser = new CSharpParser();
        Formatter = new HtmlCodeFormatter();
    };
formatter.Format("Console.WriteLine(\"Hello, world!\"));

调用HtmlCodeFormatter.Format时,它需要能够验证是否已提供解析器和格式化程序.真的,这没问题,但我有点不知道抛出哪个异常.我倾向于InvalidOperationException,但我不完全确定这是最好的选择.

最佳答案
我会扔一个InvalidOperationException.MSDN的定义是:

The exception that is thrown when a
method call is invalid for the
object’s current state.

但是,我建议使用构造函数注入而不是setter注入.这可确保您拥有有效的解析器和格式化程序.如果在构造函数中传递null,则抛出ArgumentNullException.

转载注明原文:.NET:未设置必需属性时抛出哪个异常? - 代码日志