.NET 중 빈 값 유형[Nullable]실현 원리
다음은 Nullable
사용자 정의 빈 값 형식
struct XfhNullable<T> where T : struct
{
private T innerValue;
//
public bool HasValue { set; get; }
public T Value
{
get
{
return HasValue ? innerValue: throw new InvalidOperationException();
}
}
public XfhNullable(T value)
{
this.innerValue= value;
HasValue = true;
}
public T GetValueOrDefault(T value)
{
return HasValue ? this.innerValue: value;
}
public T GetValueOrDefault()
{
return this.innerValue;
}
}
빈 값 형식의 구조 체 는 대체적으로 기능 이 정의 되 었 습 니 다.다음은 빈 값 형식의 인 스 턴 스 를 만들어 서 검증 하 겠 습 니 다.
using static System.Console;
class Program
{
static void Main()
{
//
XfhNullable<int> num = new XfhNullable<int>();
WriteLine(num.HasValue);
WriteLine(null_num.GetValueOrDefault());
}
}
이 를 통 해 알 수 있 듯 이 변수 num 은 값 을 포함 하지 않 습 니 다.GetValueOrDefault()를 호출 하면 기본 값 0 을 가 져 옵 니 다.
이 때 우 리 는 null 을 변수 num 에 할당 하면 컴 파일 러 가 잘못 보고 한 것 을 발견 할 수 있 습 니 다.Cannot convert null to'XfhNullable
public static implicit operator XfhNullable<T>(T? nullabelValue)
{
if (nullabelValue== null)
{
return new XfhNullable<T>();
}
return new XfhNullable<T>(nullabelValue.Value);
}
위의 코드 는 빈 값 형식 이 XfhNullable
static void Main()
{
XfhNullable<int> null_num = null;
WriteLine(null_num.HasValue);
}
XfhNullable
Nullable
public static bool operator ==(XfhNullable<T> cn, object obj)
{
if (cn.HasValue)
{
return false;
}
return true;
}
public static bool operator !=(XfhNullable<T> cn, object obj)
{
return !(cn == obj);
}
static void Main()
{
XfhNullable<int> null_num = null;
WriteLine(null_num == null);
}
다음은 일반 값 형식 과 XfhNullable
public static implicit operator XfhNullable<T>(T value)
{
return new XfhNullable<T>(value);
}
public static explicit operator T(XfhNullable<T> value)
{
return value.innerValue;
}
static void Main()
{
XfhNullable<int> null_num = null;
null_num = 12;//int XfhNullable<int>
WriteLine(null_num == null);
WriteLine(null_num.Value);
int i = (int)null_num;//XfhNullable<int> int
WriteLine(i);
}
실행 중인 인 스 턴 스 형식 가 져 오기:
static void Main()
{
XfhNullable<int> null_num = 12;
WriteLine(null_num.GetType());
}
이 반환 값 은 그다지 우호 적 이지 않 습 니 다.우 리 는 여기에 내 장 된 값 유형,System.Int 32 를 되 돌려 주 기 를 바 랍 니 다.구체 적 인 실현 코드 는 다음 과 같 습 니 다.
// Object GetType ( )
// new Object GetType
public new Type GetType()
{
return innerValue.GetType();
}
결론:빈 값 형식 이 없습니다.
이로써 우 리 는 비어 있 는 값 형식 XfhNullable
마지막 으로 빈 값 형식의 포장 과 상 자 를 뜯 을 수 있 습 니 다.
CLR 은 Nullable
상 자 를 뜯 을 때 null 에 대해 서 는 Nullable
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
.net 데이터베이스 조작 프레임워크 SqlSugar의 간단한 시작SqlSugar는 오래된 브랜드입니다.NET 데이터베이스 조작 프레임워크, 과당 빅데이터 과학기술팀이 유지 보수 및 업데이트, Github star 수 EF 및 Dapper 버금가 지원 데이터베이스: MySql, S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.