如何让我的通用比较器 (IComparer) 处理空值?

2023-11-24

我正在尝试编写一个用于排序的通用对象比较器,但我注意到它不能处理它所比较的​​值之一为空的实例。当一个对象为空时,我希望它像空字符串一样对待它。我尝试将 null 值设置为 String.Empty 但在调用 CompareTo() 时出现“对象必须是 String 类型”错误。

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 (obj1 == null) obj1 = String.Empty; // This doesn't work!
    if (obj2 == null) obj2 = String.Empty; // This doesn't work!

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

我现在很纠结这个!任何帮助,将不胜感激。


你不能治疗你的T作为一个空字符串,除非你的 T 被有效地限制为一个字符串。你什么should要做的就是制定一个比较空值的计划。例如

if (obj1 == null && obj2 == null)
   return 0;
else if (obj1 == null)
   return -1;
else if (obj2 == null)
   return 1;
else 
   return obj1.CompareTo(obj2);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让我的通用比较器 (IComparer) 处理空值? 的相关文章

随机推荐