当方法返回无效结果时,我应该抛出什么异常

Szy*_*nop 4 .net c# exception

我想知道当被调用的方法返回意外结果时,我应该抛出什么异常(在.NET中有什么).

例如,想象我有工厂的情况:

public abstract class Factory
{
    public A Create()
    {
        var a = new A();
        var b = CreateDependencyOfA();
        a.Something = b.Property;
    }

    protected abstract B CreateDependencyOfA();
} 
Run Code Online (Sandbox Code Playgroud)

我记录该类并创建假设CreateDependencyOfA不返回null(或其他任何东西,即假设该值介于1和5之间的整数).

当实现违反此契约时,我应该怎么做(在这种情况下返回null).在.NET中是否存在为此目的设计的任何异常类型?我知道有一些ArgumentExceptions,但据我所知,它们是输入参数.输出参数是否相同?

我问这个是因为我相信输入和输出参数之间存在某种对称性,但我不知道任何输出异常.

das*_*ght 7

如果方法返回一个永远不会返回的值,则表示程序中存在内部逻辑错误.这种错误(即代码设计为规范时必须永远不会发生的情况)最好由断言处理:

var dependency = Factory.CreateDependencyOfA();
Debug.Assert(dependency != null, "Factory returned null dependency.");
Run Code Online (Sandbox Code Playgroud)

注意:使用断言假定您正在检查自己方法的输出.换句话说,您拥有它Factory及其所有实现,您编写了所有CreateDependencyOfA方法,并且您知道这些方法不能返回null.

如果该实现Factory是由其他人编写的插件,则不应使用断言.相反,用于InvalidOperationException指示当前状态(即,Factory提供给您的实现)是无效的.

  • 这不是真的。在许多情况下,可能会发生无效结果。我可以轻松地命名1:在集合中找不到预期的项目。在这种情况下,创建KeyNotFoundException是完全有效的。 (2认同)