web-dev-qa-db-fra.com

C # struct, comment assigner une valeur nulle?

J'ai une liste:

List<int, SomeStruct>

Pour une raison quelconque, cela ne me permet pas de lui attribuer des valeurs nulles. Que dois-je faire si je ne veux pas avoir de structure associée?

26
Andy Hin

Utilisez types nullables :

List<int, SomeStruct?>

Vous ne pouvez pas affecter null à un élément de la liste car les structures sont des types valeur, tandis que null signifie un pointeur vide et ne peut donc être affecté qu'à des variables de type référence.

Notez également que List tel que vous l'utilisez n'existe pas dans .NET! Peut-être que vous voulez Dictionary ?

44
Will Vousden

En C #, une structure est un "type de valeur", qui ne peut pas être nul.

Si vous avez vraiment, vraiment besoin de pouvoir annuler cela, alors faites-en un type 'nullable' en ajoutant un point d'interrogation final.

Vous devriez probablement examiner les détails de ceci plus d'abord, cependant - il est fort probable que vous ne vouliez pas du tout une "structure", mais ce serait mieux avec une "classe".

12
Will Dean

À moins que vous n'ayez défini une collection générique personnalisée, List<T, U> N'existe pas dans l'espace de noms System.Collections.Generic . Voulez-vous plutôt dire Dictionary<TKey, TValue>?

Vous pouvez utiliser les types Nullable: Using Nullable Types (C# Programming Guide) .

Comme pour tout ValueType, vous devez spécifier explicitement que vous autoriserez les valeurs nulles pour votre type. Vous pouvez le faire en concaténant le caractère '?' Avec votre nom de type, ou en le marquant comme Nullable, où T est le nom de votre structure.

4
Will Marcouiller