Типы инициализируются с памятью, все нули. Я не знаю, соответствует ли это спецификации для всех типов значений, поэтому вы не можете рассчитывать на это, пока не проверите. Для разных типов значений нули в памяти могут означать разные вещи в зависимости от того, что представляет тип.
Типы значений автоматически инициализируются и могут использоваться, когда они являются полем класса, а не локальными переменными. Насколько я знаю, в самой CLR нет проверки инициализации. Проверка инициализации выполняется компилятором и сообщает об ошибке времени компиляции при использовании неинициализированной переменной.