it-roy-ru.com

Почему тип int никогда не равен null?

int n == 0;

if (n == null)    
{  
    Console.WriteLine("......");  
}

Верно ли, что результат выражения (n == null) всегда false, так как
a значение типа intникогда не равноnull ТИПА int?(см. предупреждение ниже)

Предупреждение CS0472 Результатом выражения всегда является «ложь», поскольку значение типа «int» никогда не равно «нулю» типа «int?»

33
avirk

Если вы хотите, чтобы ваша целочисленная переменная допускала нулевые значения, объявите ее как обнуляемый тип :

int? n = 0;

Обратите внимание на ? после int, что означает, что тип может иметь значение null. Обнуляемые типы были введены в версии 2.0 .NET Framework.

68
RedFilter

В C # использование неинициализированной переменной не допускается.

Так

int i;
Console.Writeline(i);

Приводит к ошибке компиляции.

Вы можете инициализировать int новым, таким как:

int anInt = new int();

Это приведет к значению Значение по умолчанию для int, которое равно 0. В тех случаях, когда вы хотите иметь универсальный int, можно сделать int обнуляемым с помощью синтаксиса.

int? nullableInt = null;
14
P.Brian.Mackey

Потому что int является типом значения, а не ссылочным типом. Спецификация языка C # не позволяет int содержать ноль. Попробуйте скомпилировать это утверждение:

int x = null ;

и посмотрим, что вы получите.

Вы получаете предупреждение компилятора, потому что это бессмысленный тест, и компилятор это знает.

4
Nicholas Carey

«Типы значений» в .NET (такие как int, double и bool) по определению не могут быть нулевыми - им всегда назначается фактическое значение. Проверьте это хорошее введение для типов значений по сравнению с ссылочными типами.

2
Robert Levy

Проще говоря, int - это очень простой элемент. Это маленький и простой, так что он может быть обработан быстро. Он обрабатывается как значение напрямую, а не по модели объекта/указателя. Таким образом, для него нет юридического значения NULL. Он просто содержит то, что содержит. 0 означает 0. В отличие от указателя, где значение 0 будет равно NULL. Объект, хранящий 0, будет иметь ненулевой указатель.

Если у вас будет возможность, потратьте время, чтобы сделать какую-нибудь старомодную С или ассемблерную работу, это станет намного понятнее.

1
Brian Knoblauch

Использование NULL относится к указателям и ссылкам в целом. Значение 0, присвоенное целому числу, не является нулевым. Однако, если вы можете назначить указатель на целое число и присвоить ему значение NULL, оператор действителен.

Подводя итог => 

 /*Use the keyword 'null' while assigning it to pointers and references. Use 0 for integers.*/
1
Legolas

Нет, потому что int является типом значения. int - это тип Value, такой как Date, double и т. д. Поэтому нет способа присвоить значение null.

0
Abhishek Jaiswal
 public static int? n { get; set; } = null;

ИЛИ ЖЕ 

 public static Nullable<int> n { get; set; }

или же

 public static int? n = null;

или же 

 public static int? n

или просто 

 public static int? n { get; set; } 


    static void Main(string[] args)
    {


    Console.WriteLine(n == null);

     //you also can check using 
     Console.WriteLine(n.HasValue);

        Console.ReadKey();
    }

Ключевое слово null - это литерал, представляющий нулевую ссылку, который не относится ни к какому объекту. В программировании обнуляемые типы - это особенность системы типов некоторых языков программирования, которая позволяет устанавливать специальное значение NULL вместо обычных возможных значений типа данных.

https://docs.Microsoft.com/en-us/dotnet/csharp/language-reference/keywords/nullhttps://en.wikipedia.org/wiki/Null

0
Amadeu Antunes