종류별로 차이가 있나요?그리고 Nullable<type>?
문제
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는 값 유형입니다.두 가지 형식은 서로 바꿔 사용할 수 있습니다."