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

标签 .net exception dependency-injection

这个问题在这里已经有了答案:





Is there a built in .NET exception that indicates an illegal object state?

(3 个回答)


5年前关闭。




假设我有这样的类(class):

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

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

我的解决方案有一个类,该类旨在重复使用,而无需将大量参数传递给 Bar。一遍又一遍的方法。那么,当Bar 时我应该扔什么?没有初始化为非空值?

更多信息
我基本上是在滚动我自己的代码解析器和格式化程序。称之为实物课。其中一个类是 HtmlCodeFormatter具有以下属性(以纪念依赖注入(inject)):
public IFormatter Formatter { get; set; }
public IParser Parsre { get; set; }

这使我可以编写任意数量的特定于语言的解析器和格式化程序。例如,我有一个 CSharpParserJavascriptParser .我还有一个 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.



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

关于.NET:未设置必需属性时抛出哪个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206367/

相关文章:

c# - WPF 文本框和空格

c# - 如何在网页中播放音频声音作为背景音乐

exception - hudson |加载作业时出现 NullPointerException

java - 连接 Bean 的好处

c# - 重新设置单例httpclient的证书(Reconfiguring IHttpclientFactory?)

c# - 通过网络共享锁定行为不同

c# - 如何在 .NET 中反向混淆?

java - 非法线程状态异常?不熟悉线程

java - 在不使用 instanceof 的情况下获取异常是否为 instanceof 的复杂方法

c++ - 有趣的C++依赖注入(inject)方案