127 votes

c # pourquoi on ne peut attribuer une valeur int à null un int nullable

Quelqu'un peut-il m'expliquer pourquoi une valeur nulle peut être attribuée à un int nullable, par exemple

 int? accom = (accomStr == "noval" ? null  : Convert.ToInt32(accomStr));
 

Quel est le problème avec ce code?

242voto

Harry Steinhilber Points 2603

Le problème n'est-ce pas que null ne peut pas être assigné à un int ?. Le problème est que les deux valeurs renvoyées par l'opérateur ternaire doivent être du même type, ou que l'une doit être implicitement convertible en un autre. Dans ce cas, null ne peut pas être converti implicitement en int ni vice-versus, une conversion explicite est donc nécessaire. Essayez ceci à la place:

 int? accom = (accomStr == "noval" ? (int?)null : Convert.ToInt32(accomStr));
 

41voto

Will Dean Points 25866

Ce que Harry S reste est tout à fait juste, mais

 int? accom = (accomStr == "noval" ? null : (int?)Convert.ToInt32(accomStr));
 

ferait aussi l'affaire. (Nous, les utilisateurs de Resharper, pouvons toujours nous repérer dans la foule ...)

1voto

tenss Points 11

De même, j'ai longtemps fait:

 myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X