为什么C#编译器无法理解在单独的类中使用的泛型参数?

And*_*vko 2 c# generics

这是我的代码:

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

编译器说它不能在number >= r.From和中的操作数上应用operator> =number <= r.To

我可以逃脱,List<Tuple<TNum, TNum>>但我想要更有意义的东西.那么我做错了什么或c#编译器不是那么聪明才能理解我的意图?

Jor*_*dão 7

TNum被限制实现IComparable,没有你正在使用的运算符(<=>=).您应该使用该CompareTo方法:

public void MarkOne(TNum number) {
  _markedRanges.Where(r => number.CompareTo(r.From) >= 0 && number.CompareTo(r.To) <= 0);
}
Run Code Online (Sandbox Code Playgroud)

要使用运营商,请看这里.

此外,更喜欢通用IComparable<T>.