【问题标题】:Issue with Sorting a list<xyz<String, String>>, Error: InvalidOperationException排序列表的问题<xyz<String, String>>,错误:InvalidOperationException
【发布时间】:2013-02-14 17:57:38
【问题描述】:

我正在尝试对通用列表进行排序,但收到 InvalidOperationException 错误

有人对如何纠正有建议吗?

List&lt;XYZ&lt;String, String&gt;&gt; 列表正在通过函数作为参数传递。

func( List<XYZ<String, String>> PassedList) {

   PassedList.Sort();
}

任何建议都会很有帮助。

【问题讨论】:

标签: c# sorting compiler-errors generic-list invalidoperationexception


【解决方案1】:

你的 XYZ 应该是IComparable

【讨论】:

    【解决方案2】:

    您的XYZ 必须实现IComparable 或(更好)IComparable&lt;XYZ&lt;T, U&gt;&gt;

    如果这不可能,您必须创建一个实现IComparer 或(同样,更好的是)IComparer&lt;XYZ&lt;String, String&gt;&gt; 的类,并使用采用此类对象实例的Sort() 的重载,或者使用接受与Comparison&lt;XYZ&lt;String, String&gt;&gt; 匹配的委托或lamda 表达式的表单(接受两个XZY&lt;String, String&gt; 参数,并返回int)。

    如果Sort() 方法无法确定XYZ 在哪个之前,则无法对其进行排序。

    【讨论】:

    • 谢谢乔恩。我试图使代码尽可能简单,因此尝试了 linq 并成功了
    • linq 版本以稍微不同的方式处理它。如果它是一个大列表(或可能是),则可能值得更多地查看细节,因为在某些情况下,列表 Sort() 方法比 OrderBy() 性能要好得多,但也有一些相反的情况。如果它总是一个小清单,那么我就不会担心它的那一面。
    • 我会记住这一点以备将来使用。谢谢分享。
    【解决方案3】:

    我使用 linq 语句解决了这个问题。

    我没有使用PassedList.Sort(),而是使用了以下语句:

    PassedList = PassedList.OrderBy( x => x.Column1).ToList();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-06
      • 2018-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-02-21
      • 1970-01-01
      相关资源
      最近更新 更多