문제

C#에는 nullable 기본 유형이 있습니다(예: bool?) 해당하는 별칭 Nullable<T> 유형 또는 둘 사이에 차이점이 있습니까?

도움이 되었습니까?

해결책

IL을 사용하여 보면 일다즘, 둘 다 다음과 같이 컴파일된다는 것을 알 수 있습니다. Nullable<bool>.

다른 팁

사이에는 차이가 없습니다. bool? b = null 그리고 Nullable<bool> b = null.그만큼 ? 단지 C# 컴파일러 구문 설탕입니다.

bool의 값에 액세스하려면?다음을 수행해야 합니다.

bool? myValue = true;
bool hasValue = false;

if (myValue.HasValue && myValue.Value)
{
  hasValue = true;
}

다음과 같이 할 수는 없습니다.

if (myValue)
{
  hasValue = true;
}

아직 아무도 소스(C# 사양)에 접근하지 않았다는 사실에 놀랐습니다.§4.1.10부터 Nullable 유형:

Null 허용 유형은 T?로 작성됩니다. 여기서 T는 기본 유형입니다.이 구문은 System.Nullable<T>의 약어이며 두 형식을 서로 바꿔서 사용할 수 있습니다.

따라서 두 형식 사이에는 차이가 없습니다.(다른 유형이 없다고 가정합니다. Nullable<T> 사용하는 네임스페이스 중 하나에서.)

Nullable<T> T와 T가 유효한지 여부를 나타내는 비트 플래그로 구성된 구조입니다.ㅏ Nullable<bool> 세 가지 가능한 값이 있습니다.참, 거짓, 널.

편집하다: 아, "bool" 뒤의 물음표가 실제로는 유형 이름의 일부이지 질문을 하고 있다는 표시가 아니라는 사실을 놓쳤습니다 :).귀하의 질문에 대한 대답은 "예, C#입니다. bool? 의 별칭일 뿐입니다. Nullable<bool>".

bool 값 유형이므로 NULL 값을 포함할 수 없습니다.값 유형을 다음으로 래핑하면 Nullable<>, 그것은 그 능력을 줄 것입니다.또한, 추가 속성에 따라 값 변경에 대한 액세스 방법이 변경됩니다. HasValue 그리고 Value.

그러나 질문에 : Nullable<bool> 그리고 bool? 별칭입니다.

아니요, 차이가 없습니다.요약하자면:

System.Boolean -> 유효한 값:허위 사실

bool -> System.Boolean의 별칭

Nullable<bool> -> 유효한 값:참, 거짓, 널

바보?-> Nullable<bool>의 별칭

도움이 되었기를 바랍니다.

Null 프리미티브는 Nullable로 래핑된 일반 프리미티브입니다.그 반대의 모습은 단지 컴파일러와 구문상의 설탕일 뿐입니다.

차이 없음.여기를 살펴보세요: http://msdn.microsoft.com/en-us/library/1t3y8s4s.aspx

"구문 T?Nullable의 약어입니다. 여기서 T는 값 유형입니다.두 가지 형식은 서로 바꿔 사용할 수 있습니다."

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top