nullable 형식 "int"의 기본값은 무엇입니까? (물음표 포함)?


100

C #에서 유형의 클래스 인스턴스 변수의 기본값은 무엇 int?입니까?

예를 들어, 다음 코드에서 MyNullableInt명시 적으로 할당되지 않은 경우 어떤 값이 있습니까?

class MyClass
{
    public int? MyNullableInt;
}

(답은 거의 확실하게 null또는 0일 것 같지만 그 중 어느 것입니까?)


9
왜 반대 투표입니까? (이 질문에 대한 대답은 처음에는 동작을 테스트하기 위해 실제로 코드를 실행하지 않고는 분명하지 않았습니다. 놀랍게도 StackOverflow에서이 질문의 중복을 찾을 수 없었거나 Google을 통해 다른 곳에서 쉽게 찾을 수있었습니다.)
Jon Schneider

1
당신은 여기를 볼 수 있었을 것입니다.
500-내부 서버 오류

2
@ 500-조사 할 때 그 기사를 찾았습니다. 실제로 아래의 내 답변에 연결했습니다. null입니다. 그것은 않는다 "HasValue의 기본값은 false입니다. Value 속성에는 기본값이 없습니다"하지만 직접 몇 가지 추가 굴착하지 않고 내 원래의 질문에 대답하지 않습니다 말한다.
Jon Schneider

2
중단 점을 설정하고 값이 무엇인지 확인할 수 있었기 때문인지 아니면 직접 실행 창 유형 int? x;에서 결과가 무엇인지 확인할 수 있었기 때문인지 궁금합니다 .
Rufus L

답변:


135

int?-및 "type?"을 사용하는 nullable 유형 의 기본값입니다. 선언-입니다 null.

그 이유 :

  • int?구조체 인 Nullable <T> (여기서 T는 int) 유형의 구문 설탕입니다 . ( 참조 )
  • Nullable<T>유형은 갖는 부울 HasValue의 부재, false상기 수 Nullable<T>인스턴스 (instance) "처럼 행동" null값. 특히, Null 허용 <T가> .Equals 방법 돌아 겹쳐 true경우 Nullable<T>HasValue == false실제와 비교 null값.
  • 로부터 C # 언어 사양 11.3.4 , 구조체 인스턴스의 초기 기본 값은 기본 값으로 설정하는 구조체의 값 형식 필드의 모든 및 설정이 구조체의 참조 유형 필드의 전부입니다 null.
  • boolC #에서 변수 의 기본값 은 false ( reference )입니다. 따라서 HasValue기본 Nullable<T>인스턴스 의 속성 은 false; 그러면 Nullable<T>인스턴스 자체가 null.

선언을에서 int? x = null;로 변경하면 int? x;"할당되지 않은 지역 변수 x 사용"이라는 코드 아래에 컴파일러 오류가 발생합니다.
John Pick

1
@JohnPick 이것은 변수를 사용하기 전에 변수를 초기화하는 것을 "잊었을 때"발생할 수있는 버그를 방지하기위한 C # 컴파일러 기능입니다. 초기화되지 않은 int를 만날 있는 상황 ? 클래스 멤버 변수 일 때입니다. 두 가지 예 : blogs.msdn.microsoft.com/abhinaba/2005/11/08/…
Jon Schneider

그래서 기본적으로 이곳이 당신의 기술 블로그입니까? 답변을 얻기 위해 코드를 실행하기 만하면되는 질문을 한 다음 같은 시간에 직접 질문에 답변합니다.
GôTô

4
공정의 충분한 @JonSchneider, 다음 내 나쁜
고토

VS의 컴파일러 힌트 / 경고가 잘못된 것 Field 'id' is never assigned to, and will always have its default value 0입니다.. 이상하지 않나요?
Hendy Irawan

30

나는 일명 값 Nullable<T>.GetValueOrDefault()을 사용하는 수학 계산으로 작업 할 때 특히 편리한 방법 을 공유하는 것이 중요하다고 느꼈습니다 . 속성 을 확인할 필요가없고 대신 사용할 수 있는 경우가 많습니다 .Nullable<int>int?HasValueGetValueOrDefault()

var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());

var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);

Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());

위의 코드가 작동하는 것을 보여주는 명령 줄


0
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.