Nic*_*ckG 10 .net c# sorting icomparer
我正在尝试编写用于排序的通用对象比较器,但我注意到它不处理其中一个值比较的实例为null的实例.当一个对象为null时,我希望它对待它与空字符串相同.我已经尝试将null值设置为String.Empty,但是当我调用CompareTo()时,我得到"Object必须是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);
}
Run Code Online (Sandbox Code Playgroud)
我现在非常坚持这个!任何帮助,将不胜感激.
Ant*_*ram 20
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);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6880 次 |
| 最近记录: |