Occurs when an exception is serialized to create an exception state object that contains serialized data about the exception.(Inherited from Exception.) Remarks ArgumentException is thrown when a method is invoked and at least one of the passed arguments does not meet the parameter specification of the called method.
InvalidOperationException is used in cases when the failure to invoke a method is caused by reasons other than invalid arguments. Typically, it is thrown when the state of an object cannot support the method call. For example, an InvalidOperationException exception is thrown by methods such as: IEnumerator.
As you point out, in the article Creating and Throwing Exceptions (C# Programmming Guide) under the topic Things to Avoid When Throwing Exceptions, Microsoft does indeed list System.IndexOutOfRangeException as an exception type that should not be thrown intentionally from your own source code.