语境
这是一个非常具体的问题。总而言之,我有一个类可以将代表排队以便稍后运行。我知道每个方法只有一个参数,所以我将它们存储在 Action(Object) 列表中。我不能使用泛型,因为不同的方法可以有不同类型的参数,所以我使用 Object 来代替。
当委托执行时,用户传递一个参数,然后将其传递给委托方法。问题在于类型检查:如果他们提供的参数类型与委托所期望的类型不匹配,我不想抛出特定异常。
例如,如果将此方法传递给我的类:
Sub Test(SomeNumber As Integer)
然后尝试运行:
MyClass.ExecuteDelegate("DelegateArgument")
我希望能够抛出某个异常,说他们试图将字符串用作整数并包含一些自定义信息。问题是我找不到这样做的方法。
问题
由于我将代表存储为 Action( Object ) 我不知道参数的实际类型是什么。我还没有找到任何方法来查找此信息,因此我无法将参数的类型与用户提供的参数的类型进行比较。当我使用Action(Object).Method.GetParameters
它时,它只返回 Object
或者,当我尝试调用时,我尝试使用 Try-Catch 块来检查 InvalidCastException,Action(Object).Invoke()
但这也捕获了委托方法中的任何 InvalidCastException,这是我不想要的。
有什么方法可以实现我想要做的事情吗?