我有一个将一系列动作作为参数的方法。此数组中的操作应始终需要 1 个参数,但参数类型可以不同。
该方法应该在调用它之前检查一个动作需要什么类型的参数。如果它需要 a 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
总是Object
,可能是因为参数数组MethodA
只需要Action(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)
?