Не-обнуляемым типа является ValueType, другими словами, структура. Структура не может быть пустым, поэтому пример будет:
public struct MyStruct {}
Там нет встроенного способа обеспечения, что нуль не передается в качестве параметра метода (если тип параметра не является ValueType) , Я видел, как люди создают методы расширения для выполнения более простых (т. Е. Меньше кода) утверждений о том, является ли параметр нулевым, это может быть для вас вариантом. С другой стороны, проверка начинается с самого начала; и цель проверки очень ясна. Это может быть не так, если вы используете собственный метод проверки.
C# 4.0 добавит лучшие варианты для выполнения такого рода программирования по контракту, но пока недоступен. Как указано в другом ответе PostSharp, вы можете делать то, что хотите. PostSharp работает, добавляя шаг после компиляции, где добавляется дополнительный код.
Есть несколько вариантов статической проверки того, может ли быть передан null. Например, ReSharper позволяет вам украсить ваши собственные параметры метода с помощью атрибута [NotNull], а ReSharper будет выдавать предупреждения во время компиляции, если он может определить, что параметр может быть нулевым. Конечно, это только предупреждает вас (потенциально) о плохой практике кодирования, это не проверка времени выполнения и не должна использоваться как таковая.
Если вы используете шаг после сборки, то это абсолютно стандартный способ: Code Contracts официально входит в состав .NET 4 (и доступен отдельно для .NET 3.5). –