我是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()
功能。当NumericLimit
和Min
值均为-1时,我希望Max
无效/未定义。
同样,对于NumericLimit<long>
,当Min和Max都是-1L时,限制是未定义的。
对于NumericLimit<int>
,当Min和Max都为-1时,限制是未定义的。
如何以正确代表negative one
类型的TValue
的方式实施“已定义”?
答案 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>();
}
// ...
}