如果存在类似问题,我们深表歉意。只是调用 List.Sort() 时没有抛出有用的异常,只是应用程序结束:
Unable to sort because the IComparer.Compare method returns inconsistent
results. Either a value does not compare equal to itself, or one value repeatedly
compared to another value yields different results.
我正在尝试对 UserModels 列表进行排序,例如:
class UserModel
{
public string GivenName;
public string Surname;
}
排序应该先按 Surname,然后按 GiveName,就像 LINQ 中的那样.OrderBy(u => u.Surname).ThenBy(u => u.GivenName)
。我想使用比较器,因为我稍后需要 BinarySearch() 。
比较器是:
class CustomComparer : IComparer<UserModel>
{
public int Compare(UserModel l, UserModel r)
{
if (l == null && r == null) return 0;
if (l == null) return -1;
if (r == null) return 1;
if (l.Surname == null) return -1;
if (r.Surname == null) return 1;
int compareSurname = string.Compare(l.Surname, r.Surname);
if (compareSurname != 0)
return compareSurname;
if (l.GivenName == null) return -1;
if (r.GivenName == null) return 1;
return string.Compare(l.GivenName, r.GivenName);
}
}
任何人都可以看到这个问题吗?我看不出同一个对象可能返回不相等的明显情况,或者交换的 l/r 参数返回除 -1/1 交换之外的任何内容。但一定有:(
Surname
如果两者或 都GivenName
在这里,则存在问题null
你做对了但不是这里的例子
事实上,我认为你可以简单地这样做