In my comments Jeff asks:

I have a question, how was the decision for these 2 classes ctor parameters made...

Constructor for ArgumentNullException

public ArgumentNullException( string paramName, string message)


Constructor for ArgumentException

public ArgumentException( string message, string paramName)


Well, in short Jeff, this was a design mistake.  In fact it is up on the internal “API Design Hall of Shame”.  Here is the text from that site:


ArgumentNullException does not follow the constructor pattern given in the Design Guidelines spec.
Result: Habit wins out and people commonly type:
throw new ArgumentNullException (“must pass an employee name”);
rather than:
throw new ArgumentNullException (“Name”, “must pass an employee name”);
so we end up with error message such as:
Unhandled Exception: System.ArgumentNullException: Value cannot be null. Parameter name: must pass employee name
Lesson: Just follow the pattern!


Got any other examples that should be in my API Design Hall of Shame?