Nullable<T> Structure

Définition

Représente un type valeur qui peut être affecté 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 de valeur sous-jacent du Nullable<T> type 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 Microsoft Pubs. La table contient deux colonnes qui ne sont pas nullables et deux colonnes qui sont nullables.

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.
open System

// Define the "titleAuthor" table of the Microsoft "pubs" database.

type titleAuthor =
  struct
    // Author ID format ###-##-####
    val mutable au_id: string
    // Title ID format AA####
    val mutable title_id: string
    // Author ORD is nullable.
    val mutable au_ord: Nullable<int16>
    // Royalty Percent is nullable.
    val mutable royaltyper: Nullable<int>
  end

// Display the values of the titleAuthor array elements.
let display dspTitle (dspAllTitleAuthors: #seq<titleAuthor>) =
    printfn $"*** {dspTitle} ***"
    for dspTA in dspAllTitleAuthors do
        printfn $"Author ID ... {dspTA.au_id}"
        printfn $"Title ID .... {dspTA.title_id}"
        printfn $"Author ORD .. {dspTA.au_ord.GetValueOrDefault -1s}"
        printfn $"Royalty %% ... {dspTA.royaltyper.GetValueOrDefault -1}\n"

// Declare and initialize the titleAuthor array.
let ta = Array.zeroCreate<titleAuthor> 3
ta[0].au_id <- "712-32-1176"
ta[0].title_id <- "PS3333"
ta[0].au_ord <- Nullable 1s
ta[0].royaltyper <- Nullable 100

ta[1].au_id <- "213-46-8915"
ta[1].title_id <- "BU1032"
ta[1].au_ord <- Nullable()
ta[1].royaltyper <- Nullable()

ta[2].au_id <- "672-71-3249"
ta[2].title_id <- "TC7777"
ta[2].au_ord <- Nullable()
ta[2].royaltyper <- Nullable 40

// Display the values of the titleAuthor array elements, and
// display a legend.
display "Title Authors Table" ta
printfn "Legend:"
printfn "An Author ORD of -1 means no value is defined."
printfn "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.
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

La Nullable classe représente un type valeur qui peut être affecté null.

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

Dans 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? en Visual Basic déclare un type de valeur entière qui peut être affecté null.

La Nullable<T> structure prend en charge l’utilisation d’un type valeur uniquement comme type nullable, car les types de référence sont nullables par conception.

La Nullable classe fournit une prise en charge complémentaire de 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 nullables 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 propriétés HasValue et Value. Si la HasValue propriété d’un Nullable<T> objet est true, la valeur de l’objet est accessible avec 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 un InvalidOperationException.

Boxing et unboxing

Lorsqu’un type Nullable est boxé, le Common Language Runtime boxe automatiquement la valeur sous-jacente de l’objet Nullable<T> , et non l’objet Nullable<T> lui-même. Autrement dit, si la HasValue propriété est true, le contenu de la Value propriété est boxé. Lorsque la valeur sous-jacente d’un type nullable est déboxée, le Common Language Runtime crée une nouvelle structure Nullable<T> initialisée avec la valeur sous-jacente.

Si la HasValue propriété d’un type nullable est false, le résultat d’une opération de boxe est null. Par conséquent, si un type nullable encapsulé est passé à une méthode qui attend un argument d’objet, cette méthode doit gérer le cas où l’argument est null. Lorsqu’il null est déboîté dans un type Nullable, le Common Language Runtime crée une nouvelle structure Nullable<T> et initialise la propriété HasValue à false.

Composants Windows Runtime

Vous pouvez inclure un Nullable<T> type en tant que membre d’une structure exportée dans une bibliothèque WinMD.

Constructeurs

Nom Description
Nullable<T>(T)

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

Propriétés

Nom Description
HasValue

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

Value

Obtient la valeur de l’objet actuel Nullable<T> s’il a été affecté à une valeur sous-jacente valide.

Méthodes

Nom Description
Equals(Object)

Indique si l’objet actuel Nullable<T> est égal à un objet spécifié.

GetHashCode()

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

GetValueOrDefault()

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

GetValueOrDefault(T)

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

ToString()

Retourne la représentation textuelle de la valeur de l’objet actif Nullable<T> .

Opérateurs

Nom Description
Explicit(Nullable<T> to T)

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

Implicit(T to Nullable<T>)

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

S’applique à

Voir aussi