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.
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.
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.
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.
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.
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.
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.
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.
Dot Net Perls is a collection of tested code examples. Pages are continually updated to stay current, with code correctness a top priority.
Sam Allen is passionate about computer languages. In the past, his work has been recommended by Apple and Microsoft and he has studied computers at a selective university in the United States.
No updates found for this page.
© 2007-2022 sam allen.
see site info on the changelog.