2015-08-12 3 views
0

Представьте себе следующую ошибку:Когда выбрано исключение System.ArgumentException?

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*/ } 
} 

Обычно, я бы просто вручную сгенерировать это исключение в отладчик, но если я его жестко кодирую, он просто не будет компилироваться, и я не знаю, что делает конечный пользователь, чтобы вызвать это исключение. Но я вижу, что это происходит в журналах событий.

Любая помощь будет оценена, спасибо.

+0

Документация [Класс исключения ArgumentException] (https://msdn.microsoft.com/en-us/library/system.argumentexception (v = vs.110) .aspx): исключение, которое генерируется, когда один из аргументы, предоставленные методу, недопустимы. – crashmstr

+0

Если это из официального метода Microsoft, вы можете проверить статью MSDN на этом методе. В конкретном примере, который вы указали вверху, это звучит как плохо сформулированная замена для «ArgumentNullException». – krillgar

ответ

0

По MSDN:

The exception that is thrown when one of the arguments provided to a method is not valid.

Например, пусть мы имеем следующий класс

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.

+0

В вашем примере вместо этого следует вызывать [ArgumentOutOfRangeException] (https://msdn.microsoft.com/en-us/library/system.argumentoutofrangeexception (v = vs.110) .aspx) (как указано в документации для 'ArgumentException '). – crashmstr

+0

@crashmstr Я исправил его. Считаете ли вы, что пример теперь более подходит? – Christos

+0

Я думаю, что работает лучше. – crashmstr

Смежные вопросы