Типы значений создаются в стеке (если они не вложены в ссылочный тип). В полях / расположениях в стеке есть что-то, что CLR не может гарантировать, что они будут обнулены (в отличие от полей / местоположений в управляемом куча, которая гарантированно обнуляется). Следовательно, они должны быть записаны до того, как их прочитают. В противном случае это дыра в безопасности.
Ctor по умолчанию для структуры (которая не принимает параметров и которую вы не можете явно указывать) обнуляет все поля структуры и, следовательно, вы можете использовать структуру после этого.
new BimonthlyPairStruct()
Однако, когда вы реализуете свой параметризованный ctor, вы должны убедиться, что все поля были инициализированы - что требуется, чтобы CLR передавал ваш код как безопасный / проверен .
См. Также: CLR via C # 2nd Ed - Pg 188