Currently, when one of the delegates is called with an invalid value for a particular type or a value of null for a value type, it will throw an InvalidCastException and NullReferenceException. Instead, let's have the delegates throw ArgumentException and ArgumentNullException when these situations occur.