0
我有以下VB.NET代碼:.NET - 呼叫泛型方法或演員在運行時用型
Private _retryMessages as Dictionary(Of Type, List(Of Object))
Private Sub RetryMessage(Of T)(message as T)
_retryMessages(GetType(T)).Add(message)
End Sub
Private Sub Publish(Of T)(message as T)
' code to publish message -- dependent on T
End Sub
我希望創建一個將通過字典迭代,並調用每個消息的Publish
的新方法:
Private Sub AttemptRetryMessages()
For Each messageType In _retryMessages.Keys
messages = _retryMessages(messageType)
' now I'm lost ...
'For Each message In messages
' Publish(message) '<-- System.Object
'Next
Next
End Sub
的問題是我有型,但我不知道如何調用Publish
提供通用的正確類型。如果我只是這樣稱呼它,則T
被解釋爲System.Object
。
我完全控制了代碼,所以如果有更好的方法可以解決這個問題,我願意接受。我們的目標是,我們可以有幾十種類型的消息,我只是希望能夠排隊它們以防發送失敗。
謝謝!
我從來沒有編碼VB,但我知道一些其他語言。 '私人_retryMessages作爲字典(的類型,列表(對象))'告訴我你的'_retryMessages'字段將返回一個'對象'。在不改變你的設計的情況下,我認爲你需要從你的'Publish'方法中取出'(Of T)'並且使它(猜測語法)'Private Sub Publish(消息作爲Object,類型爲Type)'並且調用它像'Publish(message,message.GetType())'(假設'GetType()'是一個方法)。 – 2012-08-15 20:41:38
當然,如果你這樣做,那麼就沒有必要爲'RetryMessage.'提供泛型參數。讓我問你:你是在爲'T'創建類,還是在使用其他類型的類?如果你正在製作它們,我會推薦使用接口,而如果VB處理這些接口,則會推薦使用泛型約束。如果你讓我知道,我會解釋如何做到這一點。 * – 2012-08-15 20:46:46
*將返回'對象'的'List'。 – 2012-08-15 20:47:19