Проблема с передачей параметров по ссылке в общедоступных общих методах - PullRequest
0 голосов
/ 22 октября 2009

У меня есть список (Of AddlInfo) с AddlInfo, являющимся объектом.

Я пытаюсь передать addlInfoList по ссылке в функцию другого класса:

Public Shared Sub SortAddlInfo(ByRef addlInfoList As List(Of AddlInfo))
    addlInfoList.Sort(AddressOf Comparer)
End Sub

Private Function Comparer(ByVal x As AddlInfo, ByVal y As AddlInfo) As Integer
    Dim result As Integer = x.AddlInfoType.CompareTo(y.AddlInfoType)
    Return result
End Function

Это работает, если я не передаю ссылку в другой класс, но когда я пытаюсь это сделать, я получаю следующую ошибку:

Не удалось разрешить перегрузку, потому что никакая доступная сортировка не может быть вызвана с этими аргументами:

'Public Sub Sort(comparison As System.Comparison(Of AddlInfo))': Cannot refer to an instance member of a class from within a shared method or shared member initializer without an explicit instance of the class.
'Public Sub Sort(comparer As System.Collections.Generic.IComparer(Of AddlInfo))': 'AddressOf' expression cannot be converted to 'System.Collections.Generic.IComparer(Of MyProject.AddlInfo)' because 'System.Collections.Generic.IComparer(Of MyProject.AddlInfo)' is not a delegate type.

Я мог бы поместить методы обратно в вызывающий класс, но я хотел бы иметь возможность вызывать эти методы из разных классов в моем приложении.

Я мог бы также создать новый список в методах, но почему? Кажется глупым.

Как-нибудь обойти это? (Или мне нужно объяснить больше?)

Заранее спасибо!

1 Ответ

1 голос
/ 22 октября 2009

Попробуйте поместить вашу функцию сравнения в класс, который реализует IComparer.

...