另一个方法的意外返回值异常

本文关键字:返回值 异常 意外 方法 另一个 | 更新日期: 2023-09-27 18:01:44

我正在寻找一个BCL异常类型,在调用另一个方法的意外返回值的情况下抛出。

我想把它命名为UnexpectedReturnValueException,但很明显。net框架没有这样的东西。

下面是一个示例代码来说明:

public class SomeClass
{
    private int savedMonth;
    private ISomeOtherClass other;
    public void DoSomething(int month, string value)
    {
        if (string.IsNullOrEmpty(value))
        {
            throw new ArgumentNullException("value");
        }
        if (!value.StartsWith("A"))
        {
            throw new ArgumentException("Value should always start with an 'A'", "value");
        }
        if (month < 1 || month > 12)
        {
            throw new ArgumentOutOfRangeException("month", "Month should be in range of 1 to 12");
        }
        if (savedMonth == month)
        {
            throw new InvalidOperationException("Provided month should be different from saved month");
        }
        var result = other.GetResult();
        if (result == null)
        {
            throw new ??? // What should I throw here?
        }
        // do other work here
    }
}
public interface ISomeOtherClass
{
    SomeOtherClassReturnValue GetResult();
}
public class SomeOtherClassReturnValue
{
}

重要:

根据我对MSDN的理解,以下例外情况不适合这里:

  • ArgumentException -当提供给方法的参数之一不合法时抛出的异常。
  • ArgumentNullException -当null引用传递给不接受它作为有效参数的方法时抛出的异常。
  • ArgumentOutOfRangeException -当参数的值超出被调用方法
  • 定义的允许的值范围时抛出的异常。
  • InvalidOperationException -当方法调用对对象当前状态无效时抛出的异常。

另一个方法的意外返回值异常

如果空值是例外,因此需要例外,最好的内置类型是InvalidOperationException

如作者所述,错误不是由方法参数直接引起的,因此没有任何Argument* -Exception适用于这种情况。

SomeClassISomeOtherClass other作为类中的私有成员,并且方法调用者不能对它有任何可见性。ISomeOtherClass -dependency是对象内部状态的一部分。如文档所述:

InvalidOperationException在方法调用无效时抛出对象的当前状态。

InvalidOperationException用于调用失败的情况方法是由无效参数以外的原因引起的。