Maison >développement back-end >C++ >Comment résoudre les erreurs du compilateur lors de l'utilisation de l'affectation conditionnelle avec des types nullables en C# ?
Erreur du compilateur lors de l'utilisation de types nullables pour l'affectation conditionnelle en C#
En C#, l'affectation utilisant l'opérateur conditionnel (?) provoque parfois une erreur du compilateur lorsque vous travaillez avec des types nullables (tels que Nullable<int>
). Un exemple courant consiste à essayer d'attribuer le résultat d'une expression conditionnelle à une variable nullable, comme indiqué dans le code suivant :
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
Ce code attribue null lorsque employeeNumberTextBox.Text
est vide et attribue une valeur int lorsqu'il n'est pas vide. Cependant, le compilateur se plaint "Impossible d'effectuer une conversion implicite entre 'null' et 'int'".
Analyse des causes
Le problème est que les opérateurs conditionnels ne prennent en compte que le type de valeurs vraies et fausses, et non le contexte dans lequel l'expression est utilisée. Dans ce cas, le compilateur ne peut pas déterminer le type de l’expression résultante car elle contient un null et un int, qui sont des types incompatibles.
Solution
Pour résoudre ce problème, vous pouvez convertir manuellement l'une des valeurs en un type nullable :
<code class="language-csharp">EmployeeNumber = string.IsNullOrEmpty(employeeNumberTextBox.Text) ? (int?)null : Convert.ToInt32(employeeNumberTextBox.Text);</code>
En convertissant explicitement null en (int?)null
, vous fournissez au compilateur les informations de type nécessaires pour analyser l'expression et effectuer l'affectation. Alternativement, vous pouvez convertir la valeur int en (int?)
si nécessaire.
Cette solution vous permet d'utiliser des types nullables et des opérateurs conditionnels de manière plus élégante, notamment lors de l'initialisation de propriétés dans les initialiseurs d'objets.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!