Наши текущие (превью) биты только обеспечить тип LazyInit, и как вы наблюдали (и JaredPar правильно диагностировали) мы ограничиваем T к ссылочным типам, так что мы можем: (i) сделать LazyInit структурой и (ii) обеспечить разумное поведение по умолчанию через CMPXCHG (т. е. мы можем проверить, что «null» означает отсутствие значения). Мы могли бы сделать T неограниченным, но решили оптимизировать общий случай - иначе бы это означало несколько дополнительных байтов; верьте этому или нет, это могло бы сделать тип непозволительно дорогим для некоторых людей.
Мы недавно немного изменили курс. В настоящее время мы планируем предложить тип LazyInit, где T неограничен дополнительно к типу LazyInitField, где T ограничен ссылочными типами. Первое - это то, что большинство людей будет использовать, но последнее может быть использовано для тех, кто является перфекционистским и может жить с ограничением на T.
Надеюсь, что это прояснит ситуацию. Приветствия,
--- Джо Даффи, PFX DEV привести
Если есть T: ограничение класса, то он не будет удовлетворен типом обнуляемого значения. – 2008-11-07 17:57:48