Nullable<T> Structure

Définition

Représente un type valeur qui peut avoir la valeur null.

generic <typename T>
 where T : value classpublic value class Nullable
public struct Nullable<T> where T : struct
[System.Serializable]
public struct Nullable<T> where T : struct
type Nullable<'T (requires 'T : struct)> = struct
[<System.Serializable>]
type Nullable<'T (requires 'T : struct)> = struct
Public Structure Nullable(Of T)

Paramètres de type

T

Type valeur sous-jacent du type Nullable<T> générique.

Héritage
Nullable<T>
Attributs

Exemples

L’exemple de code suivant définit trois lignes d’une table dans l’exemple de base de données pubs Microsoft. La table contient deux colonnes qui n’acceptent pas les valeurs NULL et deux colonnes qui acceptent les valeurs NULL.

using namespace System;

// Define the "titleAuthor" table of the Microsoft "pubs" database.
value struct titleAuthor
{
    public:
       // Author ID; format ###-##-####
       String^ au_id;
       // Title ID; format AA####
       String^ title_id;
       // Author ORD is nullable.
       Nullable<short> au_ord;
       // Royalty Percent is nullable.
       Nullable<int> royaltyper;

    // Display the values of the titleAuthor array elements.
    static void Display(String^ dspTitle,
                        array<titleAuthor>^ dspAllTitleAuthors)
    {
       Console::WriteLine("*** {0} ***", dspTitle);
       for each (titleAuthor dspTA in dspAllTitleAuthors) {
          Console::WriteLine("Author ID ... {0}", dspTA.au_id);
          Console::WriteLine("Title ID .... {0}", dspTA.title_id);
          Console::WriteLine("Author ORD .. {0}", dspTA.au_ord.HasValue ?
                             dspTA.au_ord.Value : -1);
          Console::WriteLine("Royalty % ... {0}", dspTA.royaltyper.HasValue ?
                             dspTA.royaltyper.Value : 0);
          Console::WriteLine();
       }
    }
};

void main()
{
    // Declare and initialize the titleAuthor array.
    array<titleAuthor>^ ta = gcnew array<titleAuthor>(3);
    ta[0].au_id = "712-32-1176";
    ta[0].title_id = "PS3333";
    ta[0].au_ord = 1;
    ta[0].royaltyper = 100;

    ta[1].au_id = "213-46-8915";
    ta[1].title_id = "BU1032";
//    ta[1].au_ord = nullptr;
//    ta[1].royaltyper = nullptr;

    ta[2].au_id = "672-71-3249";
    ta[2].title_id = "TC7777";
//    ta[2].au_ord = nullptr;
    ta[2].royaltyper = 40;

   // Display the values of the array elements, and
   // display a legend.
    titleAuthor::Display("Title Authors Table", ta);
    Console::WriteLine("Legend:");
    Console::WriteLine("An Author ORD of -1 means no value is defined.");
    Console::WriteLine("A Royalty % of 0 means no value is defined.");
}
// The example displays the following output:
//       *** Title Authors Table ***
//       Author ID ... 712-32-1176
//       Title ID .... PS3333
//       Author ORD .. 1
//       Royalty % ... 100
//
//       Author ID ... 213-46-8915
//       Title ID .... BU1032
//       Author ORD .. -1
//       Royalty % ... 0
//
//       Author ID ... 672-71-3249
//       Title ID .... TC7777
//       Author ORD .. -1
//       Royalty % ... 40
//
//       Legend:
//       An Author ORD of -1 means no value is defined.
//       A Royalty % of 0 means no value is defined.
using System;

class Sample
{
    // Define the "titleAuthor" table of the Microsoft "pubs" database.
    public struct titleAuthor
    {
      // Author ID; format ###-##-####
      public string au_id;
      // Title ID; format AA####
      public string title_id;
      // Author ORD is nullable.
      public short? au_ord;
      // Royalty Percent is nullable.
      public int? royaltyper;
    }

    public static void Main()
    {
      // Declare and initialize the titleAuthor array.
      titleAuthor[] ta = new titleAuthor[3];
      ta[0].au_id = "712-32-1176";
      ta[0].title_id = "PS3333";
      ta[0].au_ord = 1;
      ta[0].royaltyper = 100;

      ta[1].au_id = "213-46-8915";
      ta[1].title_id = "BU1032";
      ta[1].au_ord = null;
      ta[1].royaltyper = null;

      ta[2].au_id = "672-71-3249";
      ta[2].title_id = "TC7777";
      ta[2].au_ord = null;
      ta[2].royaltyper = 40;

      // Display the values of the titleAuthor array elements, and
      // display a legend.
      Display("Title Authors Table", ta);
      Console.WriteLine("Legend:");
      Console.WriteLine("An Author ORD of -1 means no value is defined.");
      Console.WriteLine("A Royalty % of 0 means no value is defined.");
    }

    // Display the values of the titleAuthor array elements.
    public static void Display(string dspTitle,
                               titleAuthor[] dspAllTitleAuthors)
    {
      Console.WriteLine("*** {0} ***", dspTitle);
      foreach (titleAuthor dspTA in dspAllTitleAuthors) {
         Console.WriteLine("Author ID ... {0}", dspTA.au_id);
         Console.WriteLine("Title ID .... {0}", dspTA.title_id);
         Console.WriteLine("Author ORD .. {0}", dspTA.au_ord ?? -1);
         Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper ?? 0);
         Console.WriteLine();
      }
    }
}
// The example displays the following output:
//     *** Title Authors Table ***
//     Author ID ... 712-32-1176
//     Title ID .... PS3333
//     Author ORD .. 1
//     Royalty % ... 100
//
//     Author ID ... 213-46-8915
//     Title ID .... BU1032
//     Author ORD .. -1
//     Royalty % ... 0
//
//     Author ID ... 672-71-3249
//     Title ID .... TC7777
//     Author ORD .. -1
//     Royalty % ... 40
//
//     Legend:
//     An Author ORD of -1 means no value is defined.
//     A Royalty % of 0 means no value is defined.
Class Sample
    ' Define the "titleAuthor" table of the Microsoft "pubs" database. 
    Public Structure titleAuthor
       ' Author ID; format ###-##-####
        Public au_id As String
        ' Title ID; format AA####
        Public title_id As String
        ' Author ORD is nullable.
        Public au_ord As Nullable(Of Short)
        ' Royalty Percent is nullable.
        Public royaltyper As Nullable(Of Integer)
    End Structure 
    
    Public Shared Sub Main() 
       ' Declare and initialize the titleAuthor array.
        Dim ta(2) As titleAuthor
        ta(0).au_id = "712-32-1176"
        ta(0).title_id = "PS3333"
        ta(0).au_ord = 1
        ta(0).royaltyper = 100
        
        ta(1).au_id = "213-46-8915"
        ta(1).title_id = "BU1032"
        ta(1).au_ord = Nothing
        ta(1).royaltyper = Nothing
        
        ta(2).au_id = "672-71-3249"
        ta(2).title_id = "TC7777"
        ta(2).au_ord = Nothing
        ta(2).royaltyper = 40
        
       ' Display the values of the titleAuthor array elements, and 
       ' display a legend.
        Display("Title Authors Table", ta)
        Console.WriteLine("Legend:")
        Console.WriteLine("An Author ORD of -1 means no value is defined.")
        Console.WriteLine("A Royalty % of 0 means no value is defined.")
    End Sub
    
    ' Display the values of the titleAuthor array elements.
    Public Shared Sub Display(ByVal dspTitle As String, _
                              ByVal dspAllTitleAuthors() As titleAuthor) 
        Console.WriteLine("*** {0} ***", dspTitle)
        Dim dspTA As titleAuthor
        For Each dspTA In dspAllTitleAuthors
            Console.WriteLine("Author ID ... {0}", dspTA.au_id)
            Console.WriteLine("Title ID .... {0}", dspTA.title_id)
            Console.WriteLine("Author ORD .. {0}", dspTA.au_ord.GetValueOrDefault(-1))
            Console.WriteLine("Royalty % ... {0}", dspTA.royaltyper.GetValueOrDefault(0))
            Console.WriteLine()
        Next 
    End Sub
End Class 
'This example displays the following output:
'     *** Title Authors Table ***
'     Author ID ... 712-32-1176
'     Title ID .... PS3333
'     Author ORD .. 1
'     Royalty % ... 100
'     
'     Author ID ... 213-46-8915
'     Title ID .... BU1032
'     Author ORD .. -1
'     Royalty % ... 0
'     
'     Author ID ... 672-71-3249
'     Title ID .... TC7777
'     Author ORD .. -1
'     Royalty % ... 40
'     
'     Legend:
'     An Author ORD of -1 means no value is defined.
'     A Royalty % of 0 means no value is defined.

Remarques

Un type est considéré comme Nullable s’il peut être assigné à une valeur ou peut être assigné null , ce qui signifie que le type n’a aucune valeur. Par défaut, tous les types référence, tels que String , sont Nullable, mais tous les types valeur, tels que, ne le Int32 sont pas.

en C# et Visual Basic, vous marquez un type valeur comme nullable à l’aide de la ? notation après le type valeur. par exemple, int? en C# ou Integer? dans Visual Basic déclare un type valeur entière qui peut être assigné null .

La Nullable<T> structure prend en charge l’utilisation d’un seul type valeur comme type Nullable, car les types référence acceptent les valeurs NULL par conception.

La Nullable classe fournit une prise en charge complémentaire pour la Nullable<T> structure. La Nullable classe prend en charge l’obtention du type sous-jacent d’un type Nullable, ainsi que les opérations de comparaison et d’égalité sur les paires de types Nullable dont le type valeur sous-jacent ne prend pas en charge les opérations de comparaison et d’égalité génériques.

Propriétés fondamentales

Les deux membres fondamentaux de la Nullable<T> structure sont les HasValue Value Propriétés et. Si la HasValue propriété d’un Nullable<T> objet est true , la valeur de l’objet est accessible à l’aide de la Value propriété. Si la HasValue propriété est false , la valeur de l’objet n’est pas définie et une tentative d’accès à la Value propriété lève une InvalidOperationException .

Conversion boxing et unboxing

Quand un type Nullable est boxed, le common language runtime convertit automatiquement la valeur sous-jacente de l' Nullable<T> objet, et non l' Nullable<T> objet lui-même. Autrement dit, si la HasValue propriété a la true valeur, le contenu de la Value propriété est boxed. Lorsque la valeur sous-jacente d’un type Nullable est unboxed, le common language runtime crée une nouvelle Nullable<T> structure initialisée à la valeur sous-jacente.

Si la HasValue propriété d’un type Nullable est false , le résultat d’une opération de boxing est null . Par conséquent, si un type Nullable boxed est passé à une méthode qui attend un argument d’objet, cette méthode doit être préparée pour gérer le cas où l’argument est null . Lorsque null est unboxed dans un type Nullable, le Common Language Runtime crée une nouvelle Nullable<T> structure et initialise sa HasValue propriété avec la valeur false .

composants .NET Framework 4.5.1 et Windows Runtime

à partir du .NET Framework 4.5.1, vous pouvez inclure un Nullable<T> type en tant que membre d’une structure exportée dans une bibliothèque WinMD. Auparavant, cela n’était pas pris en charge.

Constructeurs

Nullable<T>(T)

Initialise une nouvelle instance de la structure Nullable<T> avec la valeur spécifiée.

Propriétés

HasValue

Obtient une valeur indiquant si l'objet Nullable<T> actuel a une valeur valide de son type sous-jacent.

Value

Obtient la valeur de l'objet Nullable<T> actuel si une valeur sous-jacente valide lui a été assignée.

Méthodes

Equals(Object)

Indique si l'objet Nullable<T> en cours est égal à un objet spécifié.

GetHashCode()

Récupère le code de hachage de l'objet retourné par la propriété Value.

GetValueOrDefault()

Récupère la valeur de l’objet Nullable<T> actuel ou la valeur par défaut du type sous-jacent.

GetValueOrDefault(T)

Récupère la valeur de l'objet Nullable<T> actuel ou la valeur par défaut spécifiée.

ToString()

Retourne la représentation textuelle de la valeur de l'objet Nullable<T> actuel.

Opérateurs

Explicit(Nullable<T> to T)

Définit une conversion explicite d’une instance Nullable<T> à sa valeur sous-jacente.

Implicit(T to Nullable<T>)

Crée un objet Nullable<T> initialisé à une valeur spécifiée.

S’applique à

Voir aussi