web-dev-qa-db-fra.com

Pourquoi le type "int" n'est jamais égal à 'null'?

int n == 0;

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

Est-il vrai que le résultat de l'expression (n == null) est toujours false puisque
a valeur de type intn'est jamais égale ànull DE TYPE int?(voir l'avertissement ci-dessous)

Avertissement CS0472 Le résultat de l'expression est toujours 'faux' car une valeur de type 'int' n'est jamais égale à 'null' de type 'int?'

33
avirk

Si vous souhaitez que votre variable entière autorise les valeurs NULL, déclarez-la à un type nullable :

int? n = 0;

Notez le ? après int, ce qui signifie que ce type peut avoir la valeur null. Les types nullables ont été introduits avec la version 2.0 du .NET Framework.

68
RedFilter

En C #, l'utilisation d'une variable non initialisée n'est pas autorisée.

Alors

int i;
Console.Writeline(i);

Résultat en une erreur de compilation.

Vous pouvez initialiser int avec de nouveaux tels que:

int anInt = new int();

Cela donnera le Valeur par défaut for int qui est 0. Dans les cas où vous souhaitez avoir une variable générique int, vous pouvez rendre l'int entier nullable avec la syntaxe.

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

Parce que int est un type de valeur plutôt qu'un type de référence. La spécification du langage C # n'autorise pas une int à contenir null. Essayez de compiler cette déclaration:

int x = null ;

et voyez ce que vous obtenez.

Vous recevez l'avertissement du compilateur parce que c'est un test inutile et que le compilateur le sait.

4
Nicholas Carey

Les "types de valeur" dans .NET (comme int, double et bool) ne peuvent pas, par définition, être nuls - ils ont toujours une valeur réelle assignée. Découvrez cette bonne introduction aux types de valeur par rapport aux types de référence.

2
Robert Levy

En termes simples, un int est un élément très basique. C'est petit et simple pour pouvoir le manipuler rapidement. Elle est gérée directement comme la valeur, pas le long du modèle objet/pointeur. En tant que tel, il n’ya pas de valeur "NULL" légale à avoir. Il contient simplement ce qu'il contient. 0 signifie un 0. Contrairement à un pointeur, où 0 serait NULL. Un objet stockant un 0 aurait toujours un pointeur différent de zéro.

Si vous en avez l'occasion, prenez le temps de faire du travail de vieille école ou de travail en assemblée, cela deviendra beaucoup plus clair.

1
Brian Knoblauch

L'utilisation de NULL s'applique aux pointeurs et aux références en général. Une valeur 0 attribuée à un entier n'est pas nulle. Toutefois, si vous pouvez affecter un pointeur à l'entier et l'attribuer à NULL, l'instruction est valide.

En résumé => 

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

Non, car int est un type de valeur. int est un type Value comme Date, double, etc. Il n'y a donc aucun moyen d'assigner une valeur null.

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

OU 

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

ou

 public static int? n = null;

ou 

 public static int? n

ou juste 

 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();
    }

Le mot clé null est un littéral qui représente une référence null, qui ne fait référence à aucun objet. En programmation, les types nullables sont une caractéristique du système de types de certains langages de programmation qui permettent de définir la valeur sur la valeur spéciale NULL au lieu des valeurs possibles habituelles du type de données.

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

0
Amadeu Antunes