如何指定用泛型来验证这种情况?

Dar*_*Zon 4 c# generics

我正在尝试验证这个课:min >= max.我意识到使用泛型我不能使用比较器.

这是我的通用课程.

public class Range<T>
{
    public T MinValue { get; set; }
    public T MaxValue { get; set; }

    public Range() { }

    public Range(T min, T max)
    {
        this.MinValue = min;
        this.MaxValue = max;
    }

    public override bool Equals(object obj)
    {
        if (obj == null) return false;

        var other = obj as Range<T>;
        return this.MinValue.Equals(other.MinValue) &&
               this.MaxValue.Equals(other.MaxValue);
    }

    public override string ToString()
    {
        return string.Format("{0},{1}", this.MinValue, this.MaxValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

T数据类型只能是数字,有没有办法只接受数字并接受<=

Jam*_*are 11

不,你不能限制泛型的数字,但可以限制TIComparable<T>,然后使用CompareTo()

public class Range<T> where T : IComparable<T>
{
    ....
}
Run Code Online (Sandbox Code Playgroud)

然后你可以说:

if (min.CompareTo(max) >= 0)...
Run Code Online (Sandbox Code Playgroud)

并抛出验证异常或您想要的任何验证.您可以使用相同的东西来确保值> = min和<= max.

if (value.CompareTo(min) >= 0 && value.CompareTo(max) <= 0)...
Run Code Online (Sandbox Code Playgroud)