我正在尝试编写一个用于排序的通用对象比较器,但我注意到它不处理它比较的值之一为空的实例。当一个对象为 null 时,我希望它像对待空字符串一样对待它。我已尝试将空值设置为 String.Empty,但随后在调用 CompareTo() 时出现“对象必须是字符串类型”的错误。
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 被有效地限制为字符串。您应该 做的是制定一个比较空值的计划。比如
if (obj1 == null && obj2 == null)
return 0;
else if (obj1 == null)
return -1;
else if (obj2 == null)
return 1;
else
return obj1.CompareTo(obj2);
关于c# - 如何让我的通用比较器 (IComparer) 处理空值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4852432/