【问题标题】:When exactly is System.ArgumentException thrown?System.ArgumentException 究竟是什么时候抛出的?
【发布时间】:2015-08-12 18:52:00
【问题描述】:

想象以下错误:

SomeObject.someMethod failed with System.ArgumentException: Requested value 'someArgument' was not found.

这是否意味着情况是这样的:

new SomeObject().someMethod(invalid arguments);

或者这个:

public class SomeObject
{
    public SomeObject() { }
    public void someMethod(Argument someArgument) { someOtherMethod(invalid arguments); }
    private void someOtherMethod(Argument someArgument) { /*do something*/ }
}

通常,我会在调试器中手动生成此异常,但如果我硬编码它发生,那么它就不会编译,而且我不知道最终用户正在做什么来导致此异常。但我可以在事件日志中看到它发生。

任何帮助将不胜感激,谢谢。

【问题讨论】:

  • ArgumentException Class 的文档指出:当提供给方法的参数之一无效时引发的异常。
  • 如果是来自微软官方的方法,那么你可以查看MSDN关于该方法的文章。在您在顶部给出的具体示例中,这听起来像是 ArgumentNullException 的措辞不佳的替代品。

标签: c# .net object exception methods


【解决方案1】:

根据MSDN

当一个参数提供给一个 方法无效。

例如,假设我们有以下类

public class Account
{
    public decimal Amount { get; set; }

    public Account(decimal amount)
    {
        Amount = amount;
    }

    public decimal CalculateTax(decimal taxAmount)
    {
        if(taxAmount>0.8*Amount)
            throw new ArgumentException("The taxAmount should be less than 80% of Amount", "percentage");

        return Amount-taxAmount;
    }
}

现在让我们创建一个Account 对象:

var account = new Account(1000M);

如果我们将CalculateTax 作为taxAmount 900M 传递,那么将抛出ArgumentException

【讨论】:

  • 您的示例应该改为抛出ArgumentOutOfRangeException(如ArgumentException 的文档中所述)。
  • @crashmstr 我更正了。你觉得现在的例子更合适吗?
猜你喜欢
  • 2011-08-19
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2021-04-15
  • 2014-09-09
  • 2017-12-11
  • 2023-02-25
  • 1970-01-01
相关资源
最近更新 更多