Почему int не может быть нулевым? Как работает nullable int (int?) В C #? - PullRequest
8 голосов
/ 06 августа 2011

Я новичок в C # и только что узнал, что объекты могут быть нулевыми в C #, но int не может.

Кроме того, как работает null-int (int?) в C #?

Ответы [ 6 ]

12 голосов
/ 06 августа 2011

int является примитивным типом, и только ReferenceType s (объекты) могут быть обнуляемыми. Вы можете сделать int обнуляемым, обернув его в объект:

System.Nullable<int> i;

-или-

int? i;

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/nullable-types/using-nullable-types

2 голосов
/ 06 августа 2011

Вы можете использовать int с помощью int? или Nullable<int> оба абсолютно одинаковы.

2 голосов
/ 06 августа 2011

Int является типом значения. Это действительно типа Int32. Объекты, которые могут быть обнуляемыми, являются ссылочными типами. На базовом уровне разница состоит в том, что тип значения будет хранить значение с переменной, где ссылочный тип будет хранить ссылку на значение. Ссылка может быть нулевой, это означает, что она не указывает на значение. Где тип значения всегда имеет значение.

Nullable переносит тип значения, чтобы вы могли иметь значение null. Используя int? просто ярлык компилятора для объявления обнуляемого типа.

2 голосов
/ 06 августа 2011

Типы значений, такие как int, содержат прямые значения, а не ссылки, такие как ReferenceType.Значение не может быть нулевым, но ссылка может быть нулевой, что означает, что оно указывает ни на что.Значение не может иметь ничего в этом.Значение всегда содержит какое-то значение

Типы значений Nullable или Nullable являются специальными типами значений, которые в дополнение к обычным значениям типов значений также поддерживают дополнительные нулевые значения, как и ссылочные типы

1 голос
/ 06 августа 2011

Объекты являются ссылочными типами, и они могут ничего не ссылаться или иметь значение NULL, однако int является типом значения, который может содержать только значение и не может ссылаться на что-либо.

0 голосов
/ 06 августа 2011

Примитивный тип int не может выразить нуль в своем двоичном представлении, но Nullable<int> добавил дополнительный байт для выражения нулевой информации этого значения.

...