действительно ли C# являются интервалом? и bool? s всегда упаковываемый, когда hasvalue = верный?

Эта ссылка MSDN, кажется, указывает на это когда int? (или любой Nullable) имеет значение, оно всегда упаковывало (и следовательно намного менее эффективное хранилище данных, мудрых памятью, чем int). Имеет место это?

12
задан Dan Davies Brackett 30 June 2010 в 16:07
поделиться

3 ответа

Эта страница относится, когда вы упаковываете Nullable структура, а не значения внутри самой структуры.

Сохранение типа, допускающего значение NULL, не используется до тех пор, пока вы не попытаетесь упаковать сам тип значения, допускающий значение NULL:

int? a = 42; // no boxing
int? n = null; // no boxing

object nObj = n; // no boxing
object aObj = a; // only now will boxing occur

Это поведение не отличается от упаковки обычного типа значения (за исключением обработки случая NULL), так что это действительно быть ожидаемым.

13
ответ дан 2 December 2019 в 19:30
поделиться

Это не так. Nullable является родовым, поэтому он хранит вещественные int или bool.

На странице MSDN говорится о том, что происходит, когда вы помещаете в бокс Nullable или Nullable. Если вы никогда не присваиваете свою nullable struct переменной object, то у вас не будет накладных расходов на боксирование.

2
ответ дан 2 December 2019 в 19:30
поделиться

Нет. Объект Nullable является общей структурой и внутренне обрабатывает значение T без боксирования.

3
ответ дан 2 December 2019 в 19:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: