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

标签 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);
    }
}

编译器说它不能对 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/

相关文章:

c# - Web 用户控件设置默认值

c# - 将 MyClass 的列表显示到 DataGridView

c# - 使用 LINQ Where/Take 返回最相关的搜索结果

c# - 在运行时动态地向 TableLayoutPanel 添加控件

java - 添加到通用列表<?> 产生编译错误

c# - Func<S, T> 的 T 仅在 S 和 T 不同时才从 lambda 表达式的输出中推断出来?

c# - 如何在 Visual Studio 2010 中添加 DirectX 引用

java - 如何避免通用数组上的 @SuppressWarnings

c# - 使用比我需要调用的方法更少受约束的泛型类型实现接口(interface)

java - 原始类型和数据完整性列表