2010-02-12 4 views

Répondre

0

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.

2

Un int? est le même que Nullable<int> qui est une structure, c'est-à-dire un type de valeur. Il n'y a pas de conversions aux types de référence ici.

est ici la définition de Nullable de MSDN:

[SerializableAttribute] 
public struct Nullable<T> where T : struct, new() 
Questions connexes