Home
Search
C# ArgumentException: Invalid ArgumentsValidate arguments with ArgumentException, ArgumentOutOfRangeException and ArgumentNullException.
ArgumentException. A method can be called with invalid arguments. An ArgumentException may be thrown in this case. Exceptions use derived types to indicate their meaning.
Notes, arguments. ArgumentException indicates that a method was called with an invalid argument. This can help keep program quality high.
Exception
First example. This method receives a string parameter. In the method A, we perform 2 checks on the value of the variable argument, detecting when it is null or empty.
Null
Empty String
Constructor When using the ArgumentNullException constructor, you can pass a string literal indicating the null argument.
Tip You can use the same pattern on ArgumentException, which indicates a general argument-related exception.
Result The parameter name, which is specified as the string literal in both exception constructors, is written to the output.
C# program that uses ArgumentException
using System; class Program { static void Main() { // Demonstrate the argument null exception. try { A(null); } catch (Exception ex) { Console.WriteLine(ex); } // Demonstrate the general argument exception. try { A(""); } catch (Exception ex) { Console.WriteLine(ex); } // Flow path without exception. Console.WriteLine(A("test")); } static int A(string argument) { // Handle null argument. if (argument == null) { throw new ArgumentNullException("argument"); } // Handle invalid argument. if (argument.Length == 0) { throw new ArgumentException("Zero-length string invalid", "argument"); } return argument.Length; } }
System.ArgumentNullException: Value cannot be null. Parameter name: argument at Program.A(String argument)... System.ArgumentException: Zero-length string invalid Parameter name: argument at Program.A(String argument)... 4
ArgumentNullException. This is thrown by code that checks arguments for null. Usually, the method would fail with a NullReferenceException if the check was removed.
Info Here we use null on the Dictionary indexer. This is not supported by the Dictionary type.
Dictionary
Indexer
And The indexer compiles to the get_Item method. Internally, get_Item eventually uses the statement "throw new ArgumentNullException".
Tip The ArgumentNullException can be understood as an exception that is thrown by user code, not the runtime.
Tip 2 In many cases, avoiding the null check and allowing the runtime itself to detect a NullReferenceException would be faster.
C# program that causes ArgumentNullException
using System.Collections.Generic; class Program { static void Main() { var dictionary = new Dictionary<string, int>(); int value = dictionary[null]; } }
Unhandled Exception: System.ArgumentNullException: Value cannot be null. Parameter name: key
ArgumentOutOfRangeException. This program causes an ArgumentOutOfRangeException to be thrown by the Substring method. Substring requires its argument to be greater than or equal to zero.
Substring
Tip Internally, Substring checks its argument for a negative value. With this exception, it alerts you to an invalid value.
And This error is helpful. It makes your program easier to fix. It pinpoints the nature of your logical error.
Example The exception is thrown explicitly with a throw statement—not by the runtime. The message helps you pinpoint the cause.
Throw
C# program that causes ArgumentOutOfRangeException
class Program { static void Main() { string value = "test".Substring(-1); } }
Unhandled Exception: System.ArgumentOutOfRangeException: StartIndex cannot be less than zero. Parameter name: startIndex
A discussion. There are places where you should carefully validate arguments. If you have a method that is called in many different places, then validating arguments is more important.
But With an internal method, the arguments may not need to be carefully validated because they may never be invalid.
So For truly performance-critical methods, do not validate arguments in most cases.
A summary. We looked at the ArgumentException and ArgumentNullException types. The type names are a way to encode the meaning of the exception's cause. They indicate an argument problem.
Home
© 2007-2021 sam allen. see site info on the changelog