我正在从类
中检索方法列表 foreach (MethodInfo item in typeof(RptInfo).GetMethods())
{
if (item.ReturnType.Equals(typeof(DataTable)))
{
lstMethods.Items.Add((item.Name));
}
}
清楚地将方法名称添加到列表控件。
我遇到了问题,我想更准确,没有理解,正确使用'Action或'Func'来调用所选方法名称并将其返回值转换为数据视图控件。
我确实参考了: How to call a Method from String using c#?
但仍不确定正确的实施方法。实施这些概念还是新手
答案 0 :(得分:0)
首先,请注意typeof(RptInfo).GetMethods()将为您提供实例和静态方法,以及任意数量的参数。要调用这些方法中的任何一个,您需要提供实例(除非方法是静态的),以及参数的值。如果您只想使用特定签名获取方法,我建议您查看GetMethods方法的重载。
假设您有一个RptInfo实例,您希望在该实例上运行您的方法,并且您有足够的值来提供它们的参数。然后,当您从列表中选择项目时,您应该调用类似
的内容DataTable result = typeof(RptInfo)
.GetMethod(lstMethods.SelectedItem.ToString())
.Invoke(instance, new object[]{value1,value2})
as DataTable
再次,查看GetMethod方法的重载,以防您可能具有相同名称但签名不同的方法。在Invoke调用中,如果您的方法是静态的,则您将使用null而不是实例,并且您必须提供正确数量的正确类型值以满足方法的签名。