这是我的代码:
public class Range<TNum> where TNum : IComparable
{
public TNum From { get; set; }
public TNum To { get; set; }
}
public class MarkableRange<TNum> where TNum : IComparable
{
private readonly List<Range<TNum>> _markedRanges = new List<Range<TNum>>();
public void MarkOne(TNum number)
{
_markedRanges.Where(r => number >= r.From && number <= r.To);
}
}
编译器说它不能对
number >= r.From
和number <= r.To
中的操作数应用运算符> =我可以逃避
List<Tuple<TNum, TNum>>
,但我想要更有意义的东西。那么是我做错了什么还是c#编译器不了解我的意图呢?
最佳答案
TNum
被限制为实现IComparable
,它没有您正在使用的运算符(<=
和>=
)。您应该改用CompareTo
方法:
public void MarkOne(TNum number) {
_markedRanges.Where(r => number.CompareTo(r.From) >= 0 && number.CompareTo(r.To) <= 0);
}
要使用运算符,请查看here。
另外,更喜欢通用
IComparable<T>
。