我们一直在使用这种方法对通用 List<> 进行排序。最近,当 T 中的目标属性是可空类型(十进制?)时,我们注意到不正确的结果。任何想法如何纠正?
public void SortList<T>(List<T> dataSource, string fieldName, SortDirection sortDirection)
{
PropertyInfo propInfo = typeof(T).GetProperty(fieldName);
Comparison<T> compare = delegate(T a, T b)
{
bool asc = sortDirection == SortDirection.Ascending;
object valueA = asc ? propInfo.GetValue(a, null) : propInfo.GetValue(b, null);
object valueB = asc ? propInfo.GetValue(b, null) : propInfo.GetValue(a, null);
return valueA is IComparable ? ((IComparable)valueA).CompareTo(valueB) : 0;
};
dataSource.Sort(compare);
}
以上代码来自 Phil Hustead 的文章“按对象属性名称排序通用列表和 IEnumerables” http://www.codeproject.com/Articles/27851/Sorting-Generic-Lists-and-IEnumerables-by-Object-P
例如,对于我的Employee具有可为空的十进制属性Hours的对象。
可空小时 107, null, 8, 152, 64, null 排序为 8, null, 64, null, 107, 152。
我认为空值应该排序到列表的开头或结尾。