Nullable Type实现没有C#的可空特征

时间:2010-02-04 13:02:16

标签: c# .net nullable

如果我们在C#中没有此功能,我们如何在C#中实现可空类型?

4 个答案:

答案 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#版本的语法糖,即你必须使用myNullableDouble.hasValue而不是myNullableDouble == null等。(参见Andreas的评论。)

答案 2 :(得分:0)

Nullable是一种通用类型。如果没有泛型,就不可能实现这样的可空,并且不会真正有意义。

答案 3 :(得分:0)

如果不将业务规则附加到数据类型中的现有值,则不能。例如。 int.MinValue可以用作占位符,但是如果你需要这个值呢?如果你有一个规则,其中所有值都是正数,它可以工作,但不是“可空”。