アクションの配列をパラメーターとして受け取るメソッドがあります。この配列内のアクションには常に 1 つのパラメーターが必要ですが、パラメーターの型は異なる場合があります。
メソッドは、アクションを呼び出す前に、アクションに必要なパラメーターのタイプを確認する必要があります。が必要な場合String、パラメータは になります"text"。が必要な場合Integer、パラメータは になります123。
これは私が試したことです:
Sub MethodA(ParamArray actions() As Action(Of Object))
For Each action() As Action(Of Object) In actions
If action.Method.GetParameters()(0).ParameterType = GetType(String) Then
action("text")
ElseIf action.Method.GetParameters()(0).ParameterType = GetType(Integer) Then
action(123)
ElseIf ...
' You get the point.
End If
Next
End Sub
ただ、パラメータ配列がしかとらないためか、action.Method.GetParameters()(0).ParameterTypeは常にです。ObjectMethodAAction(Of Object)
コードが機能しないため、他に何を試すことができますか? アクションが実際に必要とするタイプを見つけるにはどうすればよいですか?
注: を使用することもできますが、メソッドを呼び出さずTry ... Catchに必要なパラメーターの型を特定したいと考えています。
編集: と の動作がAction(Of T)わかりAddressOfません。これはおそらく私の質問に関連しています。次のコードを参照してください。
Sub MyStringMethod(s As String)
' Do something
End Sub
MethodA(AddressOf MyStringMethod) ' Compiles
Dim stringAction As Action(Of String) = AddressOf MyStringMethod
MethodA(stringAction) 'Does not compile
ここでの違いは何ですか?AddressOfを生成しAction(Of Object)ますか?