This is based on what XNA says it does...

http://msdn.microsoft.com/en-us/library/bb198902.aspx

I still need to do some actual testing of behavior on XNA to get the details right, but they do throw exceptions at runtime here.

I have the same gut reaction as Aranda.  I really do not like using exceptions to indicate incorrect use of the API.  In our case it is especially concerning as most of MonoGame is low level high performance code and we are trading runtime performance for a debugging feature.

From [Code Complete](http://flylib.com/books/en/2.823.1.73/1/):

> Exceptions should be reserved for conditions that are truly 
> exceptional—in other words, for conditions that cannot be 
> addressed by other coding practices.

This does not seem "exceptional" (at least from the perspective of a shipped game) or something that cannot be addressed by docs, asserts, etc.

Yet XNA and other C# libraries seem to use exceptions for argument validation all the time.

The problem is that the user often only links against the release version of an assembly.  For example when you use MS XNA you don't link against a release version and a debug version like you would if it was a C++ library.  You only link against the release version...  this I guess is why validation of parameters is done via exceptions.

I don't really know how to best resolve this.