Expliquez pourquoi on ne peut pas affecter la valeur null à un entier nullable
int? accom = (accomStr == "noval" ? null : Convert.ToInt32(accomStr));
Quel est le problème avec ce code?
Le problème n'est 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, sinon l'une des deux doit être implicitement convertible. 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));
Ce que dit Harry 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 ...)
Une autre option est d'utiliser
int? accom = (accomStr == "noval" ? Convert.DBNull : Convert.ToInt32(accomStr);
J'aime celui-ci le plus.
De même, j'ai longtemps fait:
myLongVariable = (!string.IsNullOrEmpty(cbLong.SelectedItem.Value)) ? Convert.ToInt64(cbLong.SelectedItem.Value) : (long?)null;