Maison > développement back-end > C++ > Pourquoi `GetBoolValue ()? 10: Null` interdit dans un opérateur ternaire C #?

Pourquoi `GetBoolValue ()? 10: Null` interdit dans un opérateur ternaire C #?

Susan Sarandon
Libérer: 2025-01-28 22:07:16
original
827 Les gens l'ont consulté

Why is `GetBoolValue() ? 10 : null` Forbidden in a C# Ternary Operator?

C # Opérateur ternaire et entiers nullables: pourquoi ? 10 : null échoue

L'opérateur Ternaire C # (condition ? value1 : value2) exige que les deux value1 et value2 aient des types compatibles. Examinons pourquoi le code suivant produit une erreur de compilateur:

<code class="language-csharp">int? x = GetBoolValue() ? 10 : null; </code>
Copier après la connexion

Le message d'erreur, "Le type d'expression conditionnelle ne peut pas être déterminé car il n'y a pas de conversion implicite entre 'int' et ''", met en évidence le problème de base. Le compilateur interprète 10 comme un int et null comme, bien, null (qui dans ce contexte représente l'absence d'une valeur). Puisqu'il n'y a pas de conversion automatique entre un int et une valeur nulle, le compilateur ne peut pas déduire le type résultant de l'expression ternaire.

Solutions:

Pour résoudre ce problème, nous devons assurer la cohérence des types. Voici plusieurs approches:

  1. Casser explicitement 10 à un entier nullable (int?):

    <code class="language-csharp">int? x = GetBoolValue() ? (int?)10 : null;</code>
    Copier après la connexion

    Cela indique explicitement au compilateur que 10 doit être traité comme un entier nullable, permettant à la null d'être une deuxième branche valide.

  2. CASSAGE explicitement null à un entier nullable:

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : (int?)null;</code>
    Copier après la connexion

    Cela jette explicitement null à int?, ce qui rend les deux côtés de l'opérateur ternaire compatible.

  3. Utilisez la valeur par défaut pour int?:

    <code class="language-csharp">int? x = GetBoolValue() ? 10 : default(int?);</code>
    Copier après la connexion

    default(int?) évalue à null, fournissant un moyen de type de type de représenter le cas nul. Ceci est souvent préféré pour plus de clarté.

Les trois solutions obtiennent le même résultat: x sera attribuée soit 10 (en tant que int?) ou null sur la base du résultat de GetBoolValue(). La clé est de s'assurer que les deux branches de l'opérateur ternaire ont le même type compatible. L'utilisation du mot-clé default est généralement considérée comme la solution la plus lisible et maintenable.

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal