如果我们在C#中没有此功能,我们如何在C#中实现可空类型?
答案 0 :(得分:10)
答案 1 :(得分:5)
您可以将原生类型包装到结构中(快速示例为您提供一个想法,未经测试,有很多改进空间):
public struct NullableDouble {
public bool hasValue = false;
private double _value;
public double Value {
get {
if (hasValue)
return _value;
else
throw new Exception(...);
}
set {
hasValue = true;
_value = value;
}
}
}
显然,你不会得到更新的C#版本的语法糖,即你必须使用(参见Andreas的评论。)myNullableDouble.hasValue
而不是myNullableDouble == null
等。
答案 2 :(得分:0)
Nullable是一种通用类型。如果没有泛型,就不可能实现这样的可空,并且不会真正有意义。
答案 3 :(得分:0)
如果不将业务规则附加到数据类型中的现有值,则不能。例如。 int.MinValue可以用作占位符,但是如果你需要这个值呢?如果你有一个规则,其中所有值都是正数,它可以工作,但不是“可空”。