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
Susan Sarandonoriginal
2025-01-28 22:10:101008parcourir

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:

<code class="language-c#">int? x = GetBoolValue() ? 10 : null;</code>
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>

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

    <code class="language-c#">  x = GetBoolValue() ? (int?)10 : null;</code>
    La conversion cachée mentionnée dans la réponse acceptable est:
  • à :

    Le type vide
    <code class="language-c#">  x = GetBoolValue() ? 10 : (int?)null;
      x = GetBoolValue() ? 10 : default(int?);</code>
    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:
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