我正在尝试验证这个课: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
不,你不能限制泛型的数字,但可以限制T到IComparable<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)