这是我的代码:

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.Fromnumber <= 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>

07-27 22:53