实现数字限制类

时间:2017-11-16 18:25:46

标签: c#

我是C#的新手并试图将数字限制类实现为:

internal class NumericLimit<TValue> where TValue : IComparable
{
    public NumericLimit(TValue min, TValue max)
    {
        this.Max = max;
        this.Min = min;
    }

    internal TValue Max { get; }
    internal TValue Min { get; }
    internal bool WithinBounds(TValue min, TValue max)
    {
        if (min.CompareTo(this.Min) <= 0 &&
            max.CompareTo(this.Max) >= 0)
            return true;

        return false;
    }

    internal bool LessThan(TValue value)
    {
        return (value.CompareTo(this.Max) > 0);
    }

    internal bool GreaterThan(TValue value)
    {
        return (value.CompareTo(this.Min) < 0);
    }

    internal bool Contains(TValue value)
    {
        if (value.CompareTo(this.Max) == 0 ||
            value.CompareTo(this.Min) == 0)
            return true;

        return (value.CompareTo(this.Min) > 0) &&
               (value.CompareTo(this.Max) < 0);
    }

    internal bool Defined()
    {
        return true;
    }
}

问题是如何实现Defined()功能。当NumericLimitMin值均为-1时,我希望Max无效/未定义。

同样,对于NumericLimit<long>,当Min和Max都是-1L时,限制是未定义的。

对于NumericLimit<int>,当Min和Max都为-1时,限制是未定义的。

如何以正确代表negative one类型的TValue的方式实施“已定义”?

1 个答案:

答案 0 :(得分:1)

如果在一段时间后您决定使用NumericLimit<double>或其他类型的T不接受-1的值,该怎么办?我建议使用特殊的IsDefined标志并添加静态方法来构造未定义的限制:

internal class NumericLimit<TValue> where TValue : IComparable
{
    internal bool IsDefined { get; }

    public NumericLimit(TValue min, TValue max)
    {
        this.Max = max;
        this.Min = min;
        IsDefined = true;
    }

    private NumericLimit()
    {
        IsDefined = false;
    }

    public static NumericLimit<TValue> Undefined()
    {
        return new NumericLimit<TValue>();
    }

    // ...
}