Exécuter ce pour voir que le int?
est un type de valeur:
class Program
{
static int? nullInt;
static void Main(string[] args)
{
nullInt = 2;
Console.WriteLine(string.Format("{0} + 3 != {1}", nullInt, DoMath(nullInt , 3).ToString()));
Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));
nullInt = null;
Console.WriteLine(string.Format("{0} + 3 != {1}" , nullInt , DoMath(nullInt , 3).ToString()));
Console.WriteLine(string.Format("{0} * 3 = {1}" , nullInt , DoMultiply(nullInt , 3).ToString()));
Console.ReadLine();
}
static int? DoMath(int? x , int y)
{
if (x.HasValue)
{
return (++x) + y;
}
else
return y;
}
static int DoMultiply(int? x , int y)
{
if (x.HasValue)
{
return (int)x * y;
}
else
return 0;
}
}
J'ai trouvé ce très intéressant et fait pour certains utilisations intelligentes. Ce ?
crée une référence nullable à un type de valeur par ailleurs non nul. C'est comme avoir un pointeur qui peut être vérifié - HasValue
(une valeur booléenne)? Une bonne chose à propos du Nullable<T>
est que la propriété Value
n'a pas besoin d'être castée en son type original - que le travail est fait pour vous dans la structure nullable.