내보내기(0) 인쇄
모두 확장
정보
요청한 주제가 아래에 표시됩니다. 그러나 이 주제는 이 라이브러리에 포함되지 않습니다.

Nullable<T> 구조체

2013-12-13

참조 형식처럼 null도 할당될 수 있는 값 형식을 내부 형식으로 갖는 개체를 나타냅니다.

Namespace:  System
어셈블리:  mscorlib(mscorlib.dll)

public struct Nullable<T>
where T : struct, new()

형식 매개 변수

T

Nullable<T> 제네릭 형식의 내부 값 형식입니다.

Nullable<T> 형식에서는 다음과 같은 멤버를 노출합니다.

  이름설명
Public 메서드Nullable<T>Nullable<T> 구조체의 새 인스턴스를 지정된 값으로 초기화합니다.
맨 위

  이름설명
Public 속성HasValue현재 Nullable<T> 개체에 값이 있는지 여부를 나타내는 값을 가져옵니다.
Public 속성Value현재 Nullable<T> 값을 가져옵니다.
맨 위

  이름설명
Public 메서드Equals현재 Nullable<T> 개체가 지정된 개체와 같은지 여부를 나타냅니다. (ValueType.Equals(Object)을(를) 재정의함)
Protected 메서드Finalize가비지 수집기에서 Object를 회수하기 전에 개체가 리소스를 해제하고 다른 정리 작업을 수행할 수 있게 합니다. (Object에서 상속됨)
Public 메서드GetHashCodeValue 속성에서 반환하는 개체의 해시 코드를 검색합니다. (ValueType.GetHashCode()을(를) 재정의함)
Public 메서드GetType현재 인스턴스의 Type을 가져옵니다. (Object에서 상속됨)
Public 메서드GetValueOrDefault()현재 Nullable<T> 개체의 값이나 개체의 기본값을 검색합니다.
Public 메서드GetValueOrDefault(T)현재 Nullable<T> 개체의 값이나 지정된 기본값을 검색합니다.
Protected 메서드MemberwiseClone현재 Object의 단순 복사본을 만듭니다. (Object에서 상속됨)
Public 메서드ToString현재 Nullable<T> 개체 값의 텍스트 표현을 반환합니다. (ValueType.ToString()을(를) 재정의함)
맨 위

  이름설명
Public 연산자정적 멤버Explicit(Nullable<T> to T)지정된 Nullable<T> 값의 값을 반환합니다.
Public 연산자정적 멤버Implicit(T to Nullable<T>)지정된 값으로 초기화된 새 Nullable<T> 개체를 만듭니다.
맨 위

값이 할당될 수 있거나, 값이 없음을 의미하는 null이 할당될 수 있는 형식을 nullable 형식이라고 합니다. 따라서 nullable 형식은 값을 나타내거나 값이 없음을 나타낼 수 있습니다. 예를 들어, String과 같은 참조 형식은 nullable 형식이지만 Int32와 같은 값 형식은 nullable 형식이 아닙니다. 값 형식은 형식에 적절한 값만 표현할 수 있는 용량을 갖기 때문에 nullable 형식이 될 수 없습니다. 값 형식에는 null 값을 표현하는 데 필요한 추가 용량이 없습니다.

참조 형식은 nullable 형식으로 디자인되었으므로 Nullable<T> 구조체에서는 값 형식만 nullable 형식으로 사용할 수 있습니다.

Nullable 클래스에서는 Nullable<T> 구조체에 대한 보완적인 지원을 제공합니다. Nullable 클래스를 통해 nullable 형식의 내부 형식을 사용할 수 있으며, 내부 값 형식이 제네릭 비교 및 같음 연산을 지원하지 않는 nullable 형식 쌍에서 비교 및 같음 연산을 수행할 수 있습니다.

시나리오

nullable 형식을 사용하여 상황에 따라 있거나 없는 항목을 나타냅니다. 예를 들어, HTML 태그의 선택적 특성은 한 태그에는 있지만 다른 태그에는 없을 수 있으며, 데이터베이스 테이블의 null을 허용하는 열은 테이블의 한 행에는 있지만 다른 행에는 없을 수 있습니다.

특성이나 열을 클래스의 필드로 나타낼 수 있으며 필드를 값 형식으로 정의할 수 있습니다. 필드는 특성이나 열에 유효한 모든 값을 포함할 수 있지만 특성이나 열이 없음을 의미하는 추가 값을 수용할 수 없습니다. 이 경우 값 형식 대신 nullable 형식으로 필드를 정의합니다.

기본 속성

Nullable<T> 구조체의 두 기본 멤버는 HasValueValue 속성입니다. Nullable<T> 개체의 HasValue 속성이 true이면 개체의 값은 Value 속성을 사용하여 액세스할 수 있습니다. HasValue 속성이 false이면 개체의 값이 정의되지 않으며 Value 속성에 액세스하려고 하면 InvalidOperationException이 발생됩니다.

boxing 및 unboxing

nullable 형식이 boxing될 때 공용 언어 런타임에서는 Nullable<T> 개체 자체가 아니라 Nullable<T> 개체의 내부 값을 자동으로 boxing합니다. 즉, HasValue 속성이 true이면 Value 속성의 내용이 boxing됩니다. nullable 형식의 내부 값이 unboxing될 때 공용 언어 런타임에서는 내부 값으로 초기화된 새 Nullable<T> 구조체를 만듭니다.

nullable 형식의 HasValue 속성이 false인 경우 boxing 작업 결과는 null입니다. 따라서 boxing된 nullable 형식이 개체 인수가 있어야 하는 메서드로 전달된 경우 이 메서드는 인수가 null인 경우를 처리할 수 있어야 합니다. null이 nullable 형식으로 unboxing되면 공용 언어 런타임에서 새 Nullable<T> 구조체를 만들고 해당 HasValue 속성을 false로 초기화합니다.

다음 코드 예제에서는 Microsoft Pubs 샘플 데이터베이스에서 테이블의 세 행을 정의합니다. 테이블에는 null을 허용하지 않는 열 두 개와 null을 허용하는 열 두 개가 있습니다.

참고참고:

이 예제를 실행하려면 Windows Phone용 정적 TextBlock 컨트롤이 있는 예제 빌드를 참조하세요.


// This code example demonstrates the Nullable<T> class.
// The code example defines a database table in which two columns 
// are nullable. In the application, an array of rows is created 
// and initialized. The table rows could subsequently be 
// written to a database.

using System;

class Example
{
   // 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 Demo(System.Windows.Controls.TextBlock outputBlock)
   {
      // 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(outputBlock, "Title Authors Table", ta);
      outputBlock.Text += "Legend:" + "\n";
      outputBlock.Text += "An Author ORD of -1 means no value is defined." + "\n";
      outputBlock.Text += "A Royalty % of 0 means no value is defined." + "\n";
   }

   // Display the values of the titleAuthor array elements.
   public static void Display(System.Windows.Controls.TextBlock outputBlock, string dspTitle,
                              titleAuthor[] dspAllTitleAuthors)
   {
      outputBlock.Text += String.Format("*** {0} ***", dspTitle) + "\n";
      foreach (titleAuthor dspTA in dspAllTitleAuthors)
      {
         outputBlock.Text += String.Format("Author ID ... {0}", dspTA.au_id) + "\n";
         outputBlock.Text += String.Format("Title ID .... {0}", dspTA.title_id) + "\n";
         outputBlock.Text += String.Format("Author ORD .. {0}", dspTA.au_ord ?? -1) + "\n";
         outputBlock.Text += String.Format("Royalty % ... {0}", dspTA.royaltyper ?? 0) + "\n";
         outputBlock.Text += "\n";
      }
   }
}

/*
This code example produces the following results:

*** 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.

*/


Windows Phone OS

지원되는 버전: 8.0, 7.1, 7.0

Windows Phone

이 형식의 모든 공용 static(Visual Basic의 경우 Shared) 멤버는 스레드로부터 안전합니다. 모든 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.

표시:
© 2015 Microsoft