我已經創建了一個MYFUNC延伸(在模塊擴展)對所有的基類型以及通用陣列,ICollection的(OF T)和詞典(串,T):使用反射來調用擴展方法
Function MyFunc(Of T)(a() As T) As String
Function MyFunc(Of T)(collection As ICollection(Of T)) As String
Function MyFunc(Of T)(dict As Dictionary(Of String,T)) As String
在大多數情況下,我直接使用功能(即「測試」 .MyFunc()),但也有它我工作的一個泛型函數後期綁定的情況:
Function LateBoundMyFunc(val As Object) As String
Dim t As Type = val.GetType
If TypeOf val Is Array Then
t = ????
ElseIf TypeOf val Is ICollection
t = ????
ElseIf Typeof val Is Dictionary(Of String,) <- This fails
t = ????
End If
Return CType(GetType(Extensions).GetMethod("MyFunc",New Type(){t}).Invoke(Nothing,New Object(){val}),String)
這是相當處理基本類型很簡單,但是我要用什麼來代替?????以及如何測試Dictionary(Of String,T)?
問題:「如何檢查'val'是'Dictionary(Of String,T)'類型,其中T不知道?」或者你知道'T'應該是什麼類型? –
@Pranay否它不會... New Type(){t}必須匹配每個通用函數的存儲類型 - 它用作GetMethod的查找 – ic3b3rg
@Merlyn T可以是任何類型 – ic3b3rg