System.Nullable<T>
C #에서 다음 예제를보십시오 .
int x = 5;
int? y = 3;
int? result = x + y; //no compiler warning
또한 컴파일러 알아낼 수 있음을 의미한다 T
이며 int
따라서 운영자를 사용할 수.
또한
int x = 5;
int? y = 3;
bool result = x == y; //no compiler warning
이 경우, 의미가 x
있었다 null
, 표현이 될 것이다 false
. 컴파일러는 신경 쓰지 않습니다.
이제 유사 Nullable<T>
클래스 를 만들려고합니다 . 그것을라고 부르 자 Lookable<T>
.
[Serializable]
public struct Lookable<T> where T : struct
{
public Lookable(T value)
{
Value = value;
}
public T Value { get; }
public override bool Equals(object other)
{
return other != null && Value.Equals(other);
}
public override int GetHashCode()
{
return Value.GetHashCode();
}
public override string ToString()
{
return Value.ToString();
}
public static implicit operator Lookable<T>(T value)
{
return new Lookable<T>(value);
}
public static explicit operator T(Lookable<T> value)
{
return value.Value;
}
}
여기서 아이디어는 .NET의 소스 코드 에서 직접 나온 것 입니다. 제 경우에는 HasValue
부동산을 생략하고 있습니다. 이제이 예제가 작동합니다.
int x = 6;
Lookable<int> y = x;
Lookable<int> z = 4;
컴파일러는 implicit operator
올바른 이유 때문에 여기서 유형을 추론 할 수 있습니다 .
내가 이해하지 못하는 것은이 예제가 컴파일러를 불행하게 만들 것이라는 것입니다.
int x = 5;
Lookable<int> y = 3;
var result1 = x + y; //compile error
var result2 = x == y; //compile error
컴파일러가 나에게 메시지를주고 있습니다.
연산자는 '
int
'및 'Lookable<int>
' 유형의 피연산자에 적용 할 수 없습니다 .
왜 안돼? 그리고 왜 가능 Nullable<T>
합니까? 소스 코드 어디에서도 찾을 수 없습니다. 그것은 또한 가능 Lookable<T>
할까요?
이것에 대한 코드가 아닙니다 Nullable<T>
-는 C # 컴파일러에, 특히 "해제 사업자"사양, 그리고 어떻게 그들이이 적용 구체적 으로 System.Nullable<T>
. 사양 참조는 이 답변에 있습니다.
Nullable<T>
자신의 유형으로 동작을 재현 할 수 없습니다 . 컴파일러와 런타임 (박싱 등) 모두에서 특수하게 처리합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다