Недавно я столкнулся с очень странной проблемой. Я развернула новую версию программы, и я получаю эту ошибку, когда метод IComparer.Compare() вызывается внутренне:Ошибка сортировки .NET IComparer
Unable to sort because the IComparer.Compare0 method returns inconsistent
results. Either a value does not compare equal to itself, or one value repeatedly
compared to another value yields different results. x:",x's type: 'String',
IComparer.".
Странно то, что я не могу воспроизвести эту проблему на моем компьютере. Это не происходит для меня в Visual Studio 2013 (debug или release версии), и это не происходит, когда я устанавливаю приложение. Чтобы сделать вещи более странными, это даже не происходит на каждом компьютере в производстве, только около 30% из них.
Мои целевые приложения .NET Framework 4 и целевая платформа - x86.
Существует только один экземпляр объекта IComparer в моем коде, здесь:
public int Compare(string stringOne, string stringTwo)
{
if (stringOne == stringTwo) { return 0; }
else if (stringOne == null) { return stringTwo == null ? 0 : -1; }
else if (stringTwo == null) { return stringOne == null ? 0 : 1; }
else if (stringOne.StartsWith("_") && !stringTwo.StartsWith("_"))
{
return -1;
}
else if (!stringOne.StartsWith("_") && stringTwo.StartsWith("_"))
{
return 1;
}
else if ((stringOne.StartsWith("l") || stringOne.StartsWith("L")) &&
(!stringTwo.StartsWith("l") || !stringTwo.StartsWith("L")))
{
return -1;
}
else if ((!stringOne.StartsWith("l") || !stringOne.StartsWith("L")) &&
(stringTwo.StartsWith("l") || stringTwo.StartsWith("L")))
{
return 1;
}
else
{
if (stringTwo == null) { return 1; }
else { return stringOne.CompareTo(stringTwo) == 1 ? -1 : 1; }
}
}
Кто-нибудь еще был этот вопрос и нашел решение этого? Является ли мой сравнитель похожим на все случаи? Я полностью потерял эту проблему и понятия не имею, что попробовать дальше. Любая помощь будет оценена.
можете ли вы установить трассировку, чтобы узнать, что такое значения? это не так? –
Вероятно, dup: http://stackoverflow.com/questions/13407412/where-is-the-inconsistency-in-this-icomparer-that-is-causing-a-null-reference –
Это напрямую не помогает вашему вопросу , но посмотрите ['String.StartsWith (String, StringComparison)'] (https://msdn.microsoft.com/en-us/library/ms131452 (v = vs.110) .aspx). Тогда вам не нужно проверять, скажем, как 'l', так и' L'. –