У меня есть список пользовательских типов объектов, скажем
Dim a As New List(Of CustomType)
, заполненный экземплярами.У меня есть класс сравнения, который наследует
Public Class CustomTypeComparer
Implements IComparer(Of CustomType)
Public Function Compare(x As CustomType, y As CustomType) As Integer Implements IComparer(Of CustomType).Compare
...
End Function
End Class
, который вызывается с использованием метода
a.Sort(New CustomTypeComparer)
.Единственный метод компаратора Compare()
вызывается автоматически, однако иногда этот метод завершается ошибкой, поскольку x
не определен или «Не задан для экземпляра объекта».
Я просмотрел отсортированный список, чтобы не проверить егоиз элементов Nothing, подтверждается часами на a.Contains(Nothing)
, которые возвращают False
и проверяется с помощью других компараторов, которые смотрят на другие части объекта, ни у одного из них нет проблем со списком, только у этого.
Как я могу изучить проблему глубже?Есть ли какие-либо идеи, которые люди могут дать по этому вопросу?
Обновление:
При чтении справочного исходного кода платформы, метод сортировки списка использует базовый Array.Sort()
метод.Получив подсказку, и я попытался использовать метод List.TrimExcess()
в списке, это изменило поведение, и Nothing
s не было передано IComparer.Комментатор обнаружил, что ожидается, что IComparers будет сравнивать нулевые значения, что в сочетании с тем, что базовая граница массива больше, чем массив, и имеет молча Nothing
s для создания ожидаемой функциональности.