2014-01-04 3 views
-3
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 (...) { ... } 
} 

Здесь из первенствовать листа мы читаем подсказки ключевых слов, и мы должны назвать это специфический метод с использованием Reflection:Как вызвать метод с помощью отражения

MethodInfo method= method.GetMethodBody(keyword); 
String result = (String)method.Invoke(method); 

Но эти две строки кода бросать мне некоторые ошибка синтаксиса. Я использовал using System.Reflection; в верхней части файла, но ошибка сохраняется.

+0

'метод MethodInfo = method.GetMethodBody (ключевое слово)' не может работать, потому что вы используете 'метод' перед его инициализацией. Что вы пытаетесь сделать на этой линии? – CodeCaster

+0

-1: «некоторая синтаксическая ошибка» не является хорошим объяснением ошибки. Замечание: если вы выберете сообщение об ошибке в Visual Studio и нажмите «F1», вы получите гораздо более подробное объяснение ошибки из MSDN. Если вы по-прежнему не понимаете сообщение об ошибке - post exact error (вместе с кодом ошибки, например 'CS0123' или ссылкой на соответствующую статью MSDN). –

ответ

1

Не передайте MethodInfo объект method на вызов вызова, а вместо этого объект, на который вы хотите вызвать метод. Я не вижу объект, на который вы, вероятно, могли бы это сделать.

Кроме того, Invoke имеет два параметра (см. MSDN). Поэтому синтаксическая ошибка, вероятно, заключается в том, что вы забыли передать параметры.

Насколько я понимаю ваш код, у вас есть лист Excel, содержащий имена методов, которые вы хотите вызвать динамически. Правильно? Но вы не можете просто получить .NET-объект из ячейки Excel.

Если вам нужен объект для вызова метода, вам необходимо создать его и установить правильное состояние для его вызова. Таким образом, вы могли бы добавить некоторые данные на свой лист Excel и использовать его для настройки объекта.

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[] { }); 
0

Может быть для будущего читателя, можно использовать что-то вроде этого ..

keyWordHolder program = new keyWordHolder(); 
MethodInfo[] methods = typeof(keyWordHolder).GetMethods(); 
foreach (MethodInfo meth in methods) 
{ 
    if (meth.Name == keywords) 
     { 
      meth.Invoke(program, null); 
     } 
Смежные вопросы