2014-01-24 3 views
3

제가 알기로 C#에서는 배열이 참조 유형입니다. 그래서 그들은 null 일 수 있습니다. 배열을 다룰 때 System.Nullable<T> 또는 '?' 연산자를 사용하는 것이 바보 같습니다. 맞습니까?C# 프로그래밍 가이드의 "Nullable Types 사용"에서 무효화 된 배열을 예로 든 이유는 무엇입니까?

잘못되었거나 적어도 Microsoft의 공식 C# 프로그래밍 가이드가 그렇게 생각하는 것 같습니다. 페이지 Using Nullable Types에, 그들은 예를 들어이 목록 :

int?[] arr = new int?[10]; 

왜 그들이 배열 null 허용 유형 만들기 위해 귀찮게 것? 이미 nullable이 아닌가?

답변

11

nullable의 배열 자체는 아니며 각 항목의 값입니다. 이것은 정수 어레이에 대한 레퍼런스이다

int?[] arr 

:

이 NULL 정수 어레이에 대한 레퍼런스이다

int[] arr 
3

위의 예에서 '?'기호를 사용하여 nullable로 만든 배열이 아닙니다. . null이 허용되는 int이므로 nullable int 배열입니다. 그리고 정수는 참조 유형이 아닌 값 유형이므로 정수가 기본적으로 nullable이 아님을 알고 있습니다.

3

아니 명백한 difference.You이 수 없다 int 배열의 요소에 null 값을 할당하려면 다음을 고려하십시오.

int[] numbers = new int[5]; 
numbers = null; // error 

하지만 null 값을 할당 할 수 있습니다. null 가능 유형의 배열을 정의하십시오.

int?[] arr = new int?[10]; 
arr[0] = null; // ok