Наши текущие (предварительные) биты предоставляют только тип LazyInit, и, как вы заметили (и JaredPar правильно диагностировал), мы ограничиваем T ссылочными типами, чтобы мы могли: (i) сделать LazyInit структурой и (ii) предоставить разумный поведение по умолчанию через CMPXCHG (т. е. мы можем проверить, чтобы 'null' означал отсутствие значения). Мы могли бы сделать T неограниченным, но решили оптимизировать его для общего случая - иначе было бы несколько дополнительных байтов; хотите верьте, хотите нет, но это могло бы сделать тип слишком дорогим для некоторых людей.
Мы недавно немного изменили курс. В настоящее время мы планируем предложить тип LazyInit, где T неограниченно в дополнение к типу LazyInitField, где T ограничен ссылочными типами. Первое - это то, что будет использовать большинство людей, но последнее может быть использовано для тех, кто сознателен и может жить с ограничением на T.
Надеюсь, это прояснит ситуацию. Cheers,
--- Джо Даффи, PFX Dev Lead