代码之家  ›  专栏  ›  技术社区  ›  Matt Howells

为什么IEnumerable<t>.Max不将t约束为IComparable?

  •  7
  • Matt Howells  · 技术社区  · 17 年前

    如果有人打电话给 .Max() 平面上的可拓方法 IEnumerable<T> ,中的对象不实现 IComparable 一个 System.ArgumentException: At least one object must implement IComparable.

    为什么不呢 Max 以及类似的方法 T 实施 不可比

    2 回复  |  直到 17 年前
        1
  •  8
  •   Marc Gravell    17 年前

    比较是。。。享乐首先,你可以选择 IComparable<T> IComparable -你会选择哪一个?目前(通过 Comparer<T>.Default )它支持两者,但没有“这个” 这是“一般约束”。

    Nullable<T> ; 这“提升”了比较,因此是否具有可比性取决于 T ; 但是再一次, 为我们处理这件事( 可为空<T> 两者都没有实现 不可比 也没有 ).

    加它节省了一般约束传播的时间;一旦在库代码中有这样的约束,它就会很快感染所有上游调用代码,这是一个艰难的过程。

        2
  •  6
  •   Matt Howells    17 年前

    我猜是因为它更灵活。例如,您可能有一个 IEnumerable<object> 它恰好包含字符串,在这种情况下 Max() 尽管类型 Object 不执行 IComparable