Je vois du code comme celui-ci et je le comprends comme une matrice nullable, mais je ne comprends pas pourquoi en avons-nous besoin, car les matrices sont des types de refait, ils sont donc déjà nullables.
Donc, ma question est de savoir pourquoi avons-nous besoin Ceci? P>
private readonly decimal?[] _amounts = new decimal?[_count];
4 Réponses :
la déclarant comme sans le faire nullable em>, les éléments que la matrice peut stocker ne peut pas être En d'autres termes, décimal? [] code> signifie que les éléments que la matrice contient
null code> ou non null p>. p>. P>.
null code> fort>. p>.
décimal? [] code> se lit comme "un tableau de nullable em> décimales". Le
? Code> se réfère aux éléments que la matrice peut contenir et non le tableau lui-même car tous les tableaux sont des types de référence. P>
Le spécificateur nullable ici concerne non le tableau lui-même, mais au contenu de celui-ci. Comme vous le direz correctement, le tableau en soi est un type de référence, et donc, toujours nulable (au moins jusqu'à ce que c # 8).
Quelques exemples de la différence: P>
decimal[] nonNullable = new decimal[2]; nonNullable[0] = 1; //OK, a non null item nonNullable[1] = null; //Compile error: array doesn't accepts nulls nonNullable = null; //OK, set the array reference to null decimal?[] nullable = new decimal?[2]; nullable[0] = 1; //OK, a non null item nullable[1] = null; //OK, a null item (actually, a Nullable<decimal> instance) nullable = null; //OK, set the array reference to null
Veuillez noter que ma question initie le tableau en tant que nouvelle décimale? [Compte], pas neuf décimales [compte]
@ CD491415 Oui, j'ai noté que. Je mets à la fois pour des raisons de comparaison pour montrer dans quels cas ont un comportement différent, à la fois de votre cas spécifique et d'un composé.
Il y a une différence entre l'objet Array lui-même et les éléments du tableau. Lorsque vous utilisez Pour clarifier la différence , Considérez le code affiché par Alejandro, ainsi que ce code: P> La raison pour laquelle la dernière ligne est ok est due au fait qu'il existe un objet de tableau référencé ici. La seule chose qui est nulle est une partie des valeurs dedans. P> p> décimal? [] Code> Vous déclarez une matrice dont les éléments sont nullables
décimales code> valeurs. Si vous utilisiez
décimal []? Code> (Je ne suis pas sûr que la syntaxe valide, mais juste à des fins d'explication, supposez-y), vous déclareriez une variable pouvant faire référence à un tableau ou peut-être ne fait référence à rien. Le plus tard est le cas inutile que vous décrivez car, comme vous dites (au moins dans les versions plus anciennes de C #) toutes les variables de réseau sont des variables de référence qui peuvent déjà être définies sur
null code>.
Il vaut la peine de mentionner cela de C # 8.0, vous pouvez avoir un type de référence Mais comme d'autres personnes ont mentionné ceci: p> private decimal?[]? _amounts;
Explication géniale. Bart beaucoup apprécié!
On dirait que la confusion principale ici est que ce n'est pas un "éventail nullable de décimales", mais "une gamme régulière de décimales nullables".
Merci, cela l'explique