Реализация типа Nullable без функции N # - PullRequest
9 голосов
/ 04 февраля 2010

Как мы можем реализовать обнуляемый тип в C #, если у нас не было этой функции в C #?

Ответы [ 4 ]

10 голосов
/ 04 февраля 2010
5 голосов
/ 04 февраля 2010

Вы можете обернуть нативный тип в структуру (быстрый пример, чтобы дать вам идею, непроверенную, много возможностей для улучшения):

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 и т. д. (см. комментарий Андреаса.)

0 голосов
/ 04 февраля 2010

Нельзя без привязки бизнес-правил к существующим значениям в типе данных. например. int.MinValue может использоваться как заполнитель, но что если вам нужно это значение? Если у вас есть правило, в котором все значения положительны, оно может работать, но не как «обнуляемое».

0 голосов
/ 04 февраля 2010

Nullable - универсальный тип.Без дженериков невозможно реализовать подобное значение, и это не имеет смысла.

...