Voté por la respuesta de Josh , pero me gustaría agregar una más a la lista:
Se debe lanzar System.InvalidOperationException si el argumento es válido, pero el objeto está en un estado en el que no se debe usar el argumento.
Actualización tomada de MSDN:
InvalidOperationException se usa en los casos en que el incumplimiento de invocar un método se debe a razones distintas de argumentos no válidos.
Digamos que su objeto tiene un método PerformAction (acción enmSomeAction), las enmSomeActions válidas son Abrir y Cerrar. Si llama a PerformAction (enmSomeAction.Open) dos veces seguidas, la segunda llamada debería arrojar la InvalidOperationException (ya que la resolución era válida, pero no para el estado actual del control)
Como ya está haciendo lo correcto al programar a la defensiva, tengo otra excepción que mencionar es ObjectDisposedException. Si su objeto implementa IDisposable, siempre debe tener una variable de clase que rastree el estado desechado; si su objeto ha sido desechado y se llama a un método, debe activar la excepción ObjectDisposedException:
public void SomeMethod()
{
If (m_Disposed) {
throw new ObjectDisposedException("Object has been disposed")
}
// ... Normal execution code
}
Actualización: para responder a su seguimiento: es una situación un poco ambigua, y se complica un poco más por un tipo de datos genérico (no en el sentido de .NET Generics) que se utiliza para representar un conjunto específico de datos; una enumeración u otro objeto fuertemente tipado sería un ajuste más ideal, pero no siempre tenemos ese control.
Me inclinaría personalmente hacia ArgumentOutOfRangeException y proporcionaría un mensaje que indica que los valores válidos son 1-12. Mi razonamiento es que cuando habla de meses, suponiendo que todas las representaciones enteras de meses son válidas, entonces espera un valor en el rango de 1-12. Si solo ciertos meses (como los meses que tenían 31 días) fueran válidos, entonces no estaría lidiando con un Rango per se y arrojaría una Excepción Argument genérica que indicara los valores válidos, y también los documentaría en los comentarios del método.