어떻게 액세스 할 수 있습니까 null nullable의 propery HasValue
?
컴파일 된 코드를 살펴 보았지만 통사론이 아닙니다. 그래서 당신이 NullReferenceException
를 얻을하지 않습니다 - int?
가 아닌, value 타입 참조 형식 인 Nullable<int>
에 대한 짧기 때문에'.' 연산자 null null 가능
int? x = null;
if (x.HasValue)
{...}
어떻게 액세스 할 수 있습니까 null nullable의 propery HasValue
?
컴파일 된 코드를 살펴 보았지만 통사론이 아닙니다. 그래서 당신이 NullReferenceException
를 얻을하지 않습니다 - int?
가 아닌, value 타입 참조 형식 인 Nullable<int>
에 대한 짧기 때문에'.' 연산자 null null 가능
int? x = null;
if (x.HasValue)
{...}
의 :이 NullReferenceException이를 포기하지 않는 이유는
. 당신이 null
를 할당 할 때
public struct Nullable<T> where T : struct
{
private readonly T value;
private readonly bool hasValue;
//..
}
이 (Nullable<T>
을 알고이 방법으로 특수를 취급) 단지를 설정하는 컴파일러에 의해 지원 일어나는 마법이 :
Nullable<T>
구조체는 다음과 같이 보입니다 hasValue
이 인스턴스의 false 필드는 HasValue
속성에 의해 반환됩니다.
BrokenGlass과 마찬가지로, int?
은 실제로는 Nullable<T>
입니다.
구조체는 항상 값을 포함합니다. 일반적으로 구조체 변수를 null로 설정할 수는 없지만이 특별한 경우에는 기본적으로 default(Nullable<T>)
으로 설정하면됩니다. 이것은 변수 자체보다는 내용을 null로 설정합니다.
Nullable<T>
을 값으로 설정하면 암시 적 연산자를 사용하여 Value = value
을 새 값으로 설정하고 HasValue = true
을 설정합니다.
Nullable<T>
을 null로 설정하면 구조체의 모든 필드가 null입니다. bool
필드의 경우 HasValue
, null == false
입니다.
변수가 구조이기 때문에 변수 자체가 아닌 내용이 null이므로 변수를 항상 참조 할 수 있습니다.
구조에 대한 자세한 내용은 MSDN 페이지 struct의주의 섹션을 참조하십시오.
"구조 변수를 null로 설정하면 해당 내용이 변수 자체가 아닌 null로 설정됩니다." 이것은 잘못되었습니다 - 당신이'null'을 값 유형/struct에 할당 할 수 없습니다 - 컴파일러가'hasValue' 필드를 false로 설정하도록 적절히 변환하는'Nullable
@BrokenGlass, 네 말이 맞아. 나는 VB.Net에 익숙하며 현재 C#을 가르치고있다. VB에서는'Dim x As SomeStructure = Nothing'을 지정할 수 있습니다. 나는 이것이'SomeStructure x = null'보다는'SomeStructure x = default (SomeStructure)'와 같다고 추측하고 있습니다. –
@ Hand-E-Food, C# (+ VB)에 대한 답변을 업데이트하지 않으시겠습니까? – gdoron
추가, 구조체에는 null이 할당되지 않습니다. –