Nullable<T> 構造体

定義

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)

型パラメーター

T

Nullable<T> ジェネリック型の基になる値型。

継承
Nullable<T>
属性

次のコード例では、Microsoft Pubs サンプル データベース内のテーブルの 3 行を定義します。 テーブルには、null 許容ではない 2 つの列と null 許容の 2 つの列が含まれています。

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.

注釈

型は、値を割り当て可能な場合、またはを割り当て可能な場合は null 許容と言います。これは、型に値が一切含 null められていないことを意味します。 既定では、 などのすべての参照型は null 許容ですが、 などのすべての値型 String Int32 は null 値型ではありません。

C# と Visual Basic、値型の後に 表記を使用して、値型を null ? 許容としてマークします。 たとえば int? 、C# または では、Visual Basic Integer? できる整数値型を宣言します null

参照型は設計上 null 許容なので、構造体では null 許容型として値 Nullable<T> 型のみを使用できます。

クラス Nullable は、 構造体の補完的なサポートを提供 Nullable<T> します。 クラスは、null 許容型の基になる型の取得と、基になる値型がジェネリック比較操作と等値演算をサポートしていない null 許容型のペアに対する比較および等値演算をサポートします。 Nullable

基本プロパティ

構造体の 2 つの基本的な Nullable<T> メンバーは、 プロパティ HasValueValue プロパティです。 オブジェクトの プロパティが の場合は、 プロパティを使用してオブジェクトの HasValue Nullable<T> true 値にアクセス Value できます。 プロパティが HasValue の場合 false 、オブジェクトの値は未定義であり、プロパティにアクセスしようとすると Value がスローされます InvalidOperationException

ボックス化とボックス化解除

null 許容型がボックスに入っている場合、共通言語ランタイムは、オブジェクト自体ではなく、オブジェクトの基になる値 Nullable<T> を自動的 Nullable<T> にボックスに設定します。 つまり、 プロパティが HasValue の場合 true 、プロパティの内容 Value はボックスに表示されます。 null 許容型の基になる値がボックス化解除されると、共通言語ランタイムは、基になる値に初期化された新しい 構造体 Nullable<T> を作成します。

null 許容 HasValue 型の プロパティが の場合 false 、ボックス化操作の結果は になります null 。 そのため、ボックスに入った null 許容型がオブジェクト引数を受け取るメソッドに渡される場合は、引数が である場合を処理するために、そのメソッドを準備する必要があります null 。 が null 許容型にボックス化解除されている場合、共通言語ランタイムは新しい 構造体を作成し、その プロパティを null Nullable<T> HasValue に初期化します false

.NET Framework 4.5.1 および Windows ランタイム コンポーネント

.NET Framework 4.5.1 から、WinMD ライブラリにエクスポートされた構造体のメンバーとして型 Nullable<T> を含めできます。 以前は、これはサポートされていませんでした。

コンストラクター

Nullable<T>(T)

Nullable<T> 構造体の新しいインスタンスを、指定の値に初期化します。

プロパティ

HasValue

現在の Nullable<T> オブジェクトに、基になる型の有効値があるかどうかを示す値を取得します。

Value

有効な基になる値が割り当てられているかどうか示す、Nullable<T> の現在の値を取得します。

メソッド

Equals(Object)

現在の Nullable<T> オブジェクトが指定されたオブジェクトと等しいかどうかを示します。

GetHashCode()

Value プロパティから返されるオブジェクトのハッシュ コードを取得します。

GetValueOrDefault()

現在の Nullable<T> オブジェクトの値、または基になる型の既定値を取得します。

GetValueOrDefault(T)

現在の Nullable<T> オブジェクトの値、または指定した既定値を取得します。

ToString()

現在の Nullable<T> オブジェクトの値のテキスト形式を返します。

演算子

Explicit(Nullable<T> to T)

Nullable<T> インスタンスからその基になる値への明示的な変換を定義します。

Implicit(T to Nullable<T>)

指定の値に初期化された新しい Nullable<T> オブジェクトを作成します。

適用対象

こちらもご覧ください