这是我的代码:
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
中的操作数应用运算符&gt; =
我可以逃脱List<Tuple<TNum, TNum>>
,但我想要更有意义的事情。
那么我做错了什么或c#编译器不是那么聪明才能理解我的意图?
答案 0 :(得分:7)
TNum
仅限于实施IComparable
,而<=
没有您正在使用的运算符(>=
和CompareTo
)。您应该使用public void MarkOne(TNum number) {
_markedRanges.Where(r => number.CompareTo(r.From) >= 0 && number.CompareTo(r.To) <= 0);
}
方法:
IComparable<T>
要使用运算符,请查看here。
此外,更喜欢通用{{1}}。
答案 1 :(得分:0)
您可以在C#中重载运算符,因此您可以在Range类上定义委托给IComparable实现的&gt; =和&lt; =运算符。应该工作。