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;
}
9 réponses
signifie que le type de valeur en question est un type nul
"Les typessont 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); } } }
C'est un raccourci pour Nullable<int>
. Nullable<T>
est utilisé avec des types de valeurs qui ne peuvent pas être nulles.
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.
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é.
usage pratique:
public string someFunctionThatMayBeCalledWithNullAndReturnsString(int? value)
{
if (value == null)
{
return "bad value";
}
return someFunctionThatHandlesIntAndReturnsString(value);
}
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)
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.
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
}