2009-10-21 70 views
0

我有一個列表(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 

這工作,如果我沒有通過引用到另一個類,但是當我嘗試這樣做,我出現以下錯誤:

Overload resolution failed because no accessible 'Sort' can be called with these arguments:

'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

嘗試將你的比較函數放入實現IComparer的類中。

+0

Matthew:謝謝你的迴應。嘗試了你的建議,但我想我已經越過了我的頭。 ;)你能告訴我你的建議會完成什麼嗎? – John 2009-10-21 21:12:48

+0

我認爲我的問題不適合,所以我會接受你的答案並繼續前進。 – John 2009-10-22 21:40:07

+0

John, 你想要做什麼創建一個新類並讓它實現IComparer。然後,IDE將爲您創建比較功能,並將所有需要的功能放入代碼進行比較。 之後,創建該類的一個實例,並將其傳遞給您的addInfoList對象的Sort方法。 查看此URL以獲取更多信息: http://www.devcity.net/Articles/20/1/20020304.aspx 請特別注意示例中使用的CMySort類。 – 2009-10-22 22:01:36