Как в .net рациональной всего писать такой код:
void func(Obj o){
assert(o != null);
...
}
что бы во время компиляции, если вызов функции будет такой:
func(null);
вылетел красный варнинг в Output, что так вызывать данную функцию нельзя,
а в /Release моде все ассерты в msil были убраны.