Maison > développement back-end > C++ > Pourquoi '? 10: null' échoue avec des types nullables en C #?

Pourquoi '? 10: null' échoue avec des types nullables en C #?

Susan Sarandon
Libérer: 2025-01-28 22:10:10
original
1006 Les gens l'ont consulté

Why Does

Les trois symboles informatiques de yuan et le type vide: résolvez le mystère de "? 10: null"

En traitant des types vides, comprenant qu'ils sont compatibles avec d'autres types de données dans l'expression. Un scénario commun peut provoquer des erreurs accidentelles, c'est-à-dire que le symbole informatique à trois-yuan est utilisé avec le type vide et le type non empty.

Considérez le fragment de code suivant:

int? x = GetBoolValue() ? 10 : null;
Copier après la connexion
Le but ici est: si

renvoie GetBoolValue(), la valeur 10 est attribuée à l'entier vide true; Cependant, le compilateur marquera une erreur: x x null <解> Interprétation des questions

<code>错误:无法确定条件表达式的类型,因为在 int 和 <null> 之间没有隐式转换。</code>
Copier après la connexion

Cette erreur met en évidence le problème des types de non-correspondance dans l'expression de trois-yuan. L'expression gauche <返> renvoie une valeur , et l'analyse est ou

. La bonne expression tente de combiner deux expressions:

GetBoolValue() bool <这>, il s'agit d'un volume littéral true (pas false).

    <这>, c'est un mot vide.
  • 10 int Le compilateur essaie d'abord d'évaluer la bonne expression. Il rencontre <面> littéral int? et les caractères vides
  • , ils sont incompatibles.
  • et <间> ne définissent pas la conversion cachée, ce qui entraîne des types de types incomplets. null
  • <决> Résoudre le type ne correspond pas à

int Afin de résoudre ce problème, la bonne expression doit être compatible avec le type de types vides. Il y a plusieurs façons: <:> 10 null int <字> a converti le littéralement en null:

<空> Utilisez le type vide ou la valeur par défaut:

  • int? <式> Conversion implicite

      x = GetBoolValue() ? (int?)10 : null;
    Copier après la connexion
    La conversion cachée mentionnée dans la réponse acceptable est:
  • <<> à :

    Le type vide
      x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);
    Copier après la connexion
    peut être implicitement converti en .

    TO :

    non -mpty

    peut être converti en vide

    .
    • Par compatible avec le type de la bonne expression, vous pouvez résoudre le problème que le type ne correspond pas au problème et distribuer la valeur appropriée en fonction de la valeur de retour int?. null

    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!

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