for (int tsid = 1; tsid < controller.getRowCount(currentTest); tsid++)
{
// values from xls
keyword = controller.getCellData(currentTest, "Keyword", tsid);
//object=controller.getCellData(currentTest, "Object", tsid);
currentTSID = controller.getCellData(currentTest, "TSID", tsid);
stepDescription = controller.getCellData(currentTest, "Description", tsid);
Console.WriteLine("Keyword is:" + keyword);
try
{
// --this is equivalent java code
//MethodInfo method= Keywords.class.getMethod(keyword);
MethodInfo method= method.GetMethodBody(keyword);
String result = (String)method.Invoke(method);
if(!result.StartsWith("Fail")) {
ReportUtil.addKeyword(stepDescription, keyword, result,null);
}
}
catch (...) { ... }
}
在excel表中,我们正在阅读关键字,我们需要使用Reflection调用该特定方法:
MethodInfo method= method.GetMethodBody(keyword);
String result = (String)method.Invoke(method);
但是这两行代码给我一些语法错误。我在文件顶部使用了using System.Reflection;
,但错误仍然存在。
答案 0 :(得分:1)
不要将MethodInfo
对象method
传递给调用调用,而是传递要调用该方法的对象。我看不到你可能会做的对象。
此外Invoke
有两个参数(请参阅MSDN)。因此,语法错误可能是您忘记传递参数。
据我了解您的代码,您有一张Excel表格,其中包含您想要动态调用的一些方法名称。对? 但是你不能只从Excel单元格中获取.NET对象。
如果您需要一个对象来调用该方法,您需要创建一个并建立正确的状态来调用它。因此,您可以在Excel工作表中添加更多数据,并使用它来设置对象。
答案 1 :(得分:1)
在C#中,您不使用Type.class
,而是使用typeof(Type)
。
您可以将其与GetMethod(string methodName)
结合使用,以获得特定的MethodInfo
,然后您可以Invoke(object instance, object[] parameters)
。对于静态类object instance
应为null
。
例如:
typeof(Console).GetMethod("ReadLine").Invoke(null, new object[] { });
答案 2 :(得分:0)
可能是未来的读者,可以使用这样的东西..
keyWordHolder program = new keyWordHolder();
MethodInfo[] methods = typeof(keyWordHolder).GetMethods();
foreach (MethodInfo meth in methods)
{
if (meth.Name == keywords)
{
meth.Invoke(program, null);
}