什么时候是系统.ArgumentException抛出

本文关键字:抛出 ArgumentException 系统 什么时候 | 更新日期: 2023-09-27 18:07:50

想象下面的错误:

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抛出

根据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