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

时间:2014-05-05 00:49:39

标签: c# .net exception

我正在寻找一个BCL异常类型,以便在调用另一个方法时出现意外返回值。

我会将它命名为UnexpectedReturnValueException,但显然.NET Framework没有这样的内容。

以下是一个代码示例:

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 - 当空引用传递给不接受它作为有效参数的方法时引发的异常。
  • ArgumentOutOfRangeException - 当参数值超出由调用方法定义的值的允许范围时引发的异常。
  • InvalidOperationException - 方法调用对象的当前状态无效时抛出的异常

1 个答案:

答案 0 :(得分:0)

如果空值为 exception ,因此需要例外,则最佳内置类型为InvalidOperationException

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

SomeClass具有ISomeOtherClass other作为类中的私有成员,方法调用者无法对其进行任何可见性。这样ISomeOtherClass-依赖关系就成为对象内部状态的一部分。正如documentation所述:

  当方法调用无效时,将抛出

InvalidOperationException   对象的当前状态。

     

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