【问题标题】:Sorted List has oposite order after each reload. I want only Desc每次重新加载后,排序列表具有相反的顺序。我只想要 Desc
【发布时间】:2009-09-11 10:33:43
【问题描述】:

我有一个列表,我想按优先级对 Desc 进行排序,它是 int,可以是 0 到 100 之间的任何值。
我使用 GenericComparer,它允许设置 SortDirection 和 sortExpression。适用于任何字符串属性,例如 Name(它是 ProductLowDetail 的属性)。但是对于优先级,它的行为很奇怪。它确实排序,但它会改变每次重新加载 List 的排序方向(从 Desc 到 Asc,然后从 Asc 到 Desc 并重复)(浏览器中的简单 F5)。
我将 List 存储在会话中,并在 ID 代码下方存储我如何称呼它。

productList.Sort(new GenericComparer<ProductLowDetail>("DisplayPriority", SortDirection.Descending));

部分比较器实现:

public int Compare(T x, T y){
   PropertyInfo propertyInfo = typeof (T).GetProperty(_sortExpression);    
   IComparable obj1 = (IComparable) propertyInfo.GetValue(x, null);    
   IComparable obj2 = (IComparable) propertyInfo.GetValue(y, null);     

   if (SortDirection == SortDirection.Ascending){   
      return obj1.CompareTo(obj2);   
   }
   return obj2.CompareTo(obj1);   
}

有人也遇到过这个问题吗?感谢您的任何建议。十。

【问题讨论】:

    标签: .net sorting


    【解决方案1】:

    这听起来很奇怪。请提供一个简短但完整的程序(最好是简短的控制台应用程序)来演示该行为。

    一个想法:你的产品肯定有不同的显示优先级吗? List.Sort 是一个不稳定排序,这意味着相等的项目可以重新排序。如果您的产品都具有相同的显示优先级,那就可以解释这种行为......

    【讨论】:

    • 当然有一些产品具有相同的优先级,比如等于 0 或 1。所以它是多次出现的。但它们在整个列表中有所不同。
    • 在这种情况下,我们需要查看一个失败的测试示例。
    • 是的,你说得对的是不稳定。它只是为具有相同优先级的产品保持切换顺序。所以我让 Sorter 变得更简单。我已经制作了自定义排序器并将优先级与id一起加入,从而解决了问题。日。
    【解决方案2】:

    据我了解,您推出了自己的 GenericComparer 版本。 System.Collections.Generic 有一个内部的供他们使用。

    没有看到调用比较的代码我只能怀疑你的问题可能与你在比较中检查 SortDirection.Ascending 有关。

    无论排序顺序如何,Compare 都应该返回相同的结果。调用者的任务应该是根据该信息进行排序。

    对 SortDirection 进行如下检查:

    
    public int Compare(T x, T y) {
        PropertyInfo propertyInfo = typeof(T).GetProperty(_sortExpression);
        IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null);
        IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null);
        return obj1.CompareTo(obj2);
    }
    

    如果这对您不起作用,请发布更多源代码(例如 Compare 的调用者),以便我们为您提供帮助。

    【讨论】:

    • Compare 的调用者将是 List.Sort。拥有“降序比较器”和“升序比较器”是完全合理的。 List.Sort 将始终根据比较器本身按升序排序。
    • 我取消了对 SortDirection 的检查,它还是一样,仍然在切换方向。
    猜你喜欢
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 2019-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-13
    相关资源
    最近更新 更多