【问题标题】:Generic list sorting. At least one object must implement IComparable通用列表排序。至少一个对象必须实现 IComparable
【发布时间】:2013-09-25 09:00:54
【问题描述】:

我有一个我的 g 类的列表

Public Class g
    Public x as Decimal
    Public y As Decimal
End Class

Dim MyQuery As List(Of g) = ...

我尝试排序

Dim sorted As List(Of g) = MyQuery.OrderBy(Function(x) x.y).ThenBy(Function(x) x.x).ToList()

不幸的是,我收到以下错误

至少一个对象必须实现 IComparable。

我在这里做错了什么? 当我尝试按一个属性排序时,我没有收到任何错误

Dim sorted As List(Of g) = MyQuery.OrderBy(Function(x) x.y).ToList()

【问题讨论】:

  • 请不要混淆您的代码。提供有意义的样本,例如Function(x) x.x是什么?
  • @TimSchmelter 感谢您刚刚更新的评论
  • 这应该可以工作(假设x / y 实际上是decimal)。也许尝试为ThenBy 查询使用不同的变量名,即ThenBy(function(y) y.y) - 不确定它是否会有所作为,但它们可能会发生冲突。
  • 我刚刚测试过,它可以工作。请提供一个实际重现您的错误的示例...很可能您没有使用小数,但其他类型和这些类型又不实现 IComparable
  • @DanielHilgarth 您介意将其发布为答案吗?就是这样

标签: .net vb.net linq sorting generic-list


【解决方案1】:

您在问题中提供的代码按原样工作。您的原始代码很可能没有将decimal 用于属性,而是使用其他一些没有实现IComparable 的类型,从而导致您得到异常。

【讨论】:

    猜你喜欢
    • 2021-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-01
    • 2015-06-10
    • 2015-08-10
    相关资源
    最近更新 更多