我需要通过使用C#反射来调用类型的方法。如何在C#中使用反射调用方法时对参数进行自动类型转换?
在运行时,我的数据将由包含名称/值对的字典组成。 Dictionary中的名称将与我将调用的方法的参数名称相对应。另外,在运行时,我将拥有一个任意程序集限定类型名称和一个方法名称。在设计时,除了该方法将接受可变数量的类型为int,string,DateTime,bool,int [],string [],DateTime []或bool的参数外,我不知道类型和方法[]。
我没有问题,我可以创建一个使用反射类型的实例并调用该方法。我被困在那里我有字符串值,在我的字典转换为通过时,我调用该方法所需的适当类型的点:
someMethodInfo.Invoke(instance, new [] { ... })
我知道,我需要有可能通过MethodInfo.GetParameters枚举()并为每个参数执行类型转换。我想弄清楚的是如何做到这一点,理想的是如何有效地做到这一点。
到目前为止,我的研究涉及挖掘MVC源代码,因为它在将表单值传递给ActionMethod时做了类似的事情。我发现ActionMethodDispatcher,但它使用LINQ表达式,我不熟悉。
我也看过类似的问题,所以没有找到任何答案我的问题。
我会欢迎任何指向解决方案的指针。
可能有更好的方法来解决它,但我用[System.Convert](http://msdn.microsoft.com/en-us/library/system。 convert.aspx)类似的需求。处理nullabe类型也增加了一些额外的复杂性。 – Clayton
更多任意转换的另一种选择是[TypeConverter](http://msdn.microsoft.com/en-us/library/system.componentmodel.typeconverter(v = VS.100).aspx),虽然我不是确定这将如何与数组一起工作。 –
@Clayton是的,我认为System.Convert将是我的后备,如果没有更优雅的东西。看起来似乎可能比循环遍历每个参数类型和在交换机中使用System.Convert(...)执行单个类型转换更有效。 –