这是我的代码:
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>
.
关于c# - 为什么 C# 编译器无法理解单独类中使用的泛型参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6573177/