gpt4 book ai didi

c# - 为什么 c# null 可以隐式转换为 System.Nullable,但不能转换为自定义的 Nullable

转载 作者:太空狗 更新时间:2023-10-30 01:03:21 25 4
gpt4 key购买 nike

<分区>

为什么 null可以隐式转换为 System.Nullable<T>像这样:

int? val = null;

但自定义Nullable<T> (从 .net 引用源修改)无法分配 null , 有一些编译器魔法吗?谁能告诉我更多内部暗示?

[Serializable]
public struct Nullable<T> where T : struct
{
private bool hasValue;
internal T value;

public Nullable(T value)
{
this.value = value;
this.hasValue = true;
}

public bool HasValue
{
get
{
return hasValue;
}
}

public T Value
{
get
{
if (!HasValue)
{
throw new Exception();
}
return value;
}
}

public T GetValueOrDefault()
{
return value;
}

public T GetValueOrDefault(T defaultValue)
{
return HasValue ? value : defaultValue;
}

public override bool Equals(object other)
{
if (!HasValue) return other == null;
if (other == null) return false;
return value.Equals(other);
}

public override int GetHashCode()
{
return HasValue ? value.GetHashCode() : 0;
}

public override string ToString()
{
return HasValue ? value.ToString() : "";
}

public static implicit operator Nullable<T>(T value)
{
return new Nullable<T>(value);
}

public static explicit operator T(Nullable<T> value)
{
return value.Value;
}
}

下面测试代码,编译错误

Nullable<int> x = null; //ERROR Cannot convert null to 'Nullable<int>' because it is a non-nullable value type

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com