The point was to *not* do these checks, but have .NET check and throw the exception for you. C# and .NET are geared toward quickly producing quality code and this could only help that - while I (grudgingly) check all my public methods I'm sure there are
a lot of coders out there who just assume things will never be null.
Chances are you don't need a custom message, and if you do, don't mark it non-nullable and do the checks yourself. It's a win-win idea.