모든 기본 형식과 ICollection (Of T) 및 Dictionary (Of String, T)에 대한 MyFunc 확장을 Module Extensions에 만들었습니다.Reflection을 사용하여 확장 메서드 호출
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이'T가 알려져 있지 않은'Dictionary (Of String, T) '유형인지 어떻게 확인합니까?" 아니면'T'가 어떤 타입인지 알아? –
@Pranay 아니요 ... New Type() {t}은 generic 함수 각각에 대해 저장된 형식과 일치해야합니다. GetMethod에 대한 조회로 작동합니다. – ic3b3rg
@Merlyn T는 모든 유형이 될 수 있습니다. – ic3b3rg