这个问题在这里已经有了答案:
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; }
这使我可以编写任意数量的特定于语言的解析器和格式化程序。例如,我有一个
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.
然而 ,我建议使用构造函数注入(inject)而不是 setter 注入(inject)。这可确保您拥有有效的解析器和格式化程序。如果在构造函数中传递了 null,则抛出 ArgumentNullException .
关于.NET:未设置必需属性时抛出哪个异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5206367/