我有一个用户控件,网格使用ObjectDataSource获取数据。网格中的所有列都是可排序的。如果用户单击特定列名称,则会根据该列(List.Sort(sortColumn))对列表进行排序。
当其中一列的字段中包含空/空值时,我遇到了问题。当strA / strB为null或两者都为null时,比较行strA.CompareTo(strB)失败,并且“对象引用未设置为对象的实例”。
但是,我已经为strA和strB包含了!string.IsNullOrEmpty()以避免空引用异常。它仍然没有对网格进行排序。
下面给出了代码段。
int IComparer<MyWorklistItem>.Compare(MyWorkItem x, MyWorkItem y)
{
int sortValue = 1;
if (this.strSortField.Length == 0)
{
return 0;
}
MyWorkItem item1 = this.blnSortDesc ? y : x;
MyWorkItem item2 = this.blnSortDesc ? x : y;
PropertyInfo property1 = item1.GetType().GetProperty(this.strSortField);
PropertyInfo property2 = item2.GetType().GetProperty(this.strSortField);
string strA = (string)property1.GetValue(item1, null);
string strB = (string)property2.GetValue(item2, null);
if (!string.IsNullOrEmpty(strA) && !string.IsNullOrEmpty(strB))
{
sortValue = strA.CompareTo(strB);
}
return sortValue;
}
当其中一个值或两者都为null时,如何排序。
注意:我使用的是VS 2005,所以LINQ没有可能。
请建议。
谢谢, 斯利拉姆
答案 0 :(得分:3)
您可以使用静态string.Compare
方法而不是实例方法来避免null的问题,因为您总是在比较字符串属性。
http://msdn.microsoft.com/en-us/library/system.string.compare.aspx
答案 1 :(得分:0)
在进行空检查之前,您正在对变量调用GetType
。
如果你在其他任何应该处理所有事情的事情之前进行空检查。