C# Nullable 타입
Nullable Type
C#에서는 Value Type에도 null을 할당할 수 있는 Nullable 타입을 지원한다. Nullable 타입은 Value 값을 갖고 있으면서 Null 상태를 체크할 수 있는 기능을 갖고 있는 struct이다. 따라서 Nullable 타입은 구조체이므로 Value 타입이다.
int?와 같이 해당 Value Type 뒤에 물음표를 붙이면 해당 정수형 타입이 Nullable 정수형 타입임을 의미한다. 즉, 이 변수에는 Null을 할당할 수 있다. 이러한 특별한 문법은 .NET의 Nullable<T> 구조체로 컴파일시 변환된다. 즉, int?는 Nullable<int>와 동일한 역할을 한다.
int? i = null;
bool? b = null;
int?[] a = new int?[100];
Nullable<T> 타입
C#에서 int?, bool?, DateTime?와 같은 T? 표현은 .NET의 Nullable<T>와 같은 표현이며, 이 구조체는 값을 가지고 있는지를 체크하는 HasValue 속성과 실제값을 나타내는 Value 속성을 가지고 있다.
double _Sum = 0;
DateTime _Time;
bool? _Selected;
public void CheckInput(int? i, double? d, DateTime? time, bool? selected)
{
if (i.HasValue && d.HasValue)
this._Sum = (double)i.Value + (double)d.Value;
// time값이 있는 체크.
if (!time.HasValue)
throw new ArgumentException();
else
this._Time = time.Value;
// 만약 selected가 NULL이면 false를 할당
this._Selected = selected ?? false;
}
Nullable 정적 클래스
.NET Framework에 있는 정적 클래스 System.Nullable은 두개의 Nullable 객체를 비교하거나 특정 Nullable 타입의 어떤 Value 타입에 기반을 두고 있는지 알아내는 기능을 제공하고 있다.
void NullableTest()
{
int? a = null;
int? b = 0;
int result = Nullable.Compare<int>(a, b);
Console.WriteLine(result); //결과 -1
double? c = 0.01;
double? d = 0.0100;
bool result2 = Nullable.Equals<double>(c, d);
Console.WriteLine(result2); //결과 true
}
'C# > 이론' 카테고리의 다른 글
[예제로 배우는 C# 프로그래밍] 이벤트 (0) | 2022.07.06 |
---|---|
[예제로 배우는 C# 프로그래밍] 메서드 파라미터 (0) | 2022.07.06 |
[예제로 배우는 C# 프로그래밍] 클래스 (0) | 2022.07.06 |
[예제로 배우는 C# 프로그래밍] 구조체 (0) | 2022.07.06 |
[예제로 배우는 C# 프로그래밍] 네임스페이스 (0) | 2022.07.06 |
댓글