Quel est le but d'un point d'interrogation après un type (par exemple: int? mavariable)?

en général, le point d'interrogation sert principalement au conditionnel, x ? "yes" : "no" .

mais j'ai vu une autre utilisation pour cela, mais je ne peux pas trouver une explication de cette utilisation de l'opérateur ? , par exemple.

public int? myProperty
{
   get;
   set;
}
355
demandé sur Bᴜᴅɪ 2010-04-22 16:52:36

9 réponses

signifie que le type de valeur en question est un type nul

"
Les types

sont des instances du système.Nullable struct. Un le type nul peut représenter la gamme correcte de valeurs pour son type de valeur sous-jacente, plus une valeur nulle supplémentaire. Par exemple, un Nullable, prononcé "Nullable of Int32," peut être assignée valeur de -2147483648 à 2147483647, ou il peut être attribué le nul valeur. Nullable peut être attribué les valeurs true, false ou NULL. La capacité d'assigner null aux types numériques et booléens est particulièrement utile lorsque vous travaillez avec des bases de données et d'autres données types qui contiennent des éléments auxquels on ne peut attribuer de valeur. Pour exemple, un champ Booléen dans une base de données peut stocker les valeurs true ou faux, ou peut être indéfini.

class NullableExample
{
  static void Main()
  {
      int? num = null;

      // Is the HasValue property true?
      if (num.HasValue)
      {
          System.Console.WriteLine("num = " + num.Value);
      }
      else
      {
          System.Console.WriteLine("num = Null");
      }

      // y is set to zero
      int y = num.GetValueOrDefault();

      // num.Value throws an InvalidOperationException if num.HasValue is false
      try
      {
          y = num.Value;
      }
      catch (System.InvalidOperationException e)
      {
          System.Console.WriteLine(e.Message);
      }
  }
}
360
répondu Sean 2017-03-28 16:14:12

C'est un raccourci pour Nullable<int> . Nullable<T> est utilisé avec des types de valeurs qui ne peuvent pas être nulles.

102
répondu Klaus Byskov Pedersen 2010-04-22 12:53:53

Dans

x ? "yes" : "no"

le ? déclare une phrase si . Ici: x représente la condition booléenne; la partie avant le : est le puis phrase et la partie après est le autrement phrase.

dans, par exemple,

int?

le ? déclare un type nullable, et signifie que le type avant qu'il peut avoir une valeur nulle.

51
répondu eKek0 2017-02-15 13:38:14

Types Nullables

Système.Nullable struct. nullable type peut représenter la gamme normale de valeurs pour le type de valeur sous-jacent, plus une valeur nulle supplémentaire . Pour exemple, un [ Nullable<Int32> ], prononcé "Nullable of Int32," peut être assignée toute valeur de -2147483648 à 2147483647, ou il peut être attribué le la valeur null. Un [ Nullable<bool> ] peut être attribué les valeurs vrai ou faux, ou NULL. La possibilité d'attribuer null à les types numériques et booléens est particulièrement utile lorsque vous traitez avec bases de données et autres types de données sur la base des éléments qui peuvent ne pas être une valeur assignée. Par exemple, un Champ booléen dans une base de données peut stocker les valeurs vrai ou faux, ou il peut être indéterminé.

45
répondu Ahmet Kakıcı 2018-05-14 11:46:39

il déclare que le type est nul.

11
répondu Thanos Papathanasiou 2010-04-22 13:00:46

usage pratique:

public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
  if (value == null)
  {
    return "bad value";
  }

  return someFunctionThatHandlesIntAndReturnsString(value);
}
4
répondu A.J.Bauer 2015-11-22 12:05:38

pour compléter les réponses ci-dessus, voici un exemple de code

struct Test
{
    int something;
}
struct NullableTest
{
    int something;
}
class Example
{
    public void Demo()
    {
        Test t = new Test();
        t = null;

        NullableTest? t2 = new NullableTest();
        t2 = null;
    }
}

cela donnerait une erreur de compilation:

erreur 12 ne peut pas convertir null En 'Test' parce qu'il est un non-null valeur type

notez qu'il n'y a pas d'erreur de compilation pour NullableTest. (note de l' ? dans la déclaration t2)

3
répondu Sunil Purushothaman 2016-01-29 13:17:09

int? c'est la abréviation de Nullable<int> , les deux formes sont interchangeables.

Nullable<T> est un opérateur que vous pouvez utiliser avec une valeur de type T pour faire accepter null .

dans le cas où vous ne le savez pas: les types de valeur sont des types qui acceptent les valeurs comme int , bool , char etc...

ils ne peuvent pas accepter les références aux valeurs: générer une erreur de compilation si vous leur assignez un null , par opposition à types de référence , qui peut évidemment l'accepter.

Pourquoi auriez-vous besoin? Parce que parfois vos variables de type de valeur pouvaient recevoir des références nulles retournées par quelque chose qui ne fonctionnait pas très bien, comme une variable manquante ou non définie retournée à partir d'une base de données.

je vous suggère de lire la Documentation de Microsoft parce qu'il couvre assez bien le sujet.

0
répondu Nicola Amadio 2018-09-06 10:12:16

pour créer une option, Ajouter un ? d'après le type que vous souhaitez envelopper. N'importe quel type peut être facultatif, même vos propres types. Vous ne pouvez pas avoir un espace entre le type et le ? .

var name: String? = "Bob" // Create an optional String that contains "Bob"
var peter: Person? = Person() // An optional "Person" (custom type)

// A class with a String and an optional String property
class Car {
var modelName: String // must exist
var internalName: String? // may or may not exist
}
-3
répondu Durgesh Pal 2017-08-02 05:43:54