0

我有一个collectionviewsource,它的来源是一个可观察的集合,我正在这样排序;

_viewSource.SortDescriptions.Add(new SortDescription() { PropertyName ="PropertyName", Direction = ListSortDirection.Ascending });

这一切都很好,直到我尝试按列表中具有空值的属性进行排序。然后我得到一个 InvalidOperationException,“无法比较数组中的两个元素”

我是否必须实现自己的 IComparer 类才能解决 null 问题,还是我错过了一个技巧?

提前致谢..

4

1 回答 1

1

是的,要处理空值,您必须写下自己的custom sorter实现IComparer。可以参考这个以防万一 - IComparer 示例


private class sortYearAscendingHelper : IComparer
{
   int IComparer.Compare(object a, object b)
   {
      car c1=(car)a;
      car c2=(car)b;
      if(c1.year == null && c2.year == null)
         return 0;
      if(c1.year == null && c2.year != null)
         return -1;
      if(c1.year != null && c2.year == null)
         return 1;
      if (c1.year > c2.year)
         return 1;
      if (c1.year < c2.year)
         return -1;
      else
         return 0;
   }
}
于 2012-05-17T17:11:29.417 回答