2013-03-04 2 views
2

У меня есть проект с использованием C# .NET 2.0 (нельзя использовать более высокую версию). Я хотел бы получить имя параметров метода в методе, который называется первым. Если я вызываю метод из MyMethodsClass, я хочу получить строку, указывающую, какой параметр недействителен, следуя некоторым условиям, указанным в методе isValid из класса MyCheckClass.Получить имя параметра из вызывающего метода

Со следующим кодом я получаю строку, которая возвращает «Пожалуйста, проверьте параметр 5», если я назову myMehtod (5,1,1). Но я хотел бы получить: «Пожалуйста, проверьте параметр».

Как я мог это сделать? Спасибо!

public MyMethodsClass { 

    public string myMethod (int a, int b, int c) { 

     return MyCheckClass.isValid(a,b,c); 
    } 

    public string myMethod2 (int d, int e) { 
     return MyCheckClass.isValid(d,e); 
    } 

} 


//Other file 
public class MyCheckClass { 

    public static string isValid (params object[] parameters) { 

      StringBuilder result= new StringBuilder();   
      for (int i = 0; i < parameters.Length; i++) 
      { 
       object p = parameters[i]; 
       //Some checks... 
       if (p == null || p.Equals("") || p != 5) 
       {      
        result.Append("Please check the " + p + " parameter"); 
       } 
      } 
      return result.toString();    
    } 
} 
+1

Чтобы получить это ясно, если myMethod2 называется как этот myMethod2 (SomeValue, someOtherValue); вы хотите иметь имя «someValue» и «someOtherValue». Или вы хотите, чтобы «d» и «e» были в сигнатуре метода? – RvdK

+0

Я хочу иметь имена подписи, да. Например: «Пожалуйста, проверьте параметр», «Пожалуйста, проверьте параметр d» – pablof

ответ

0

Эти две линии должны сделать работу для вас, возможно, необходимо адаптироваться, но должно работать ^^

 MethodInfo info = typeof (MyMethodsClass).GetMethod("MethodName"); 
     string name = info.GetParameters()[indexOfTheFaultyOne].Name; 
+0

@Antonijn Um, в примере «a» - это имя формального параметра в объявлении 'myMethod'. В примере дано метод был вызван как 'myMethod (5,1,1)', и он хочет извлечь 'a', который соответствует параметру' 5'. –

3

Вы объединить две вещи, которые вы уже знаете, как это сделать.

  1. How can I find the method that called the current method?
  2. How can you get the names of method parameters in C#?
+1

@ Антоний это ват, который хочет. Пожалуйста, см. Мой комментарий к вопросу и его реакцию на него – RvdK

+0

Да, я думаю, что это то, что я хочу. Я собираюсь проверить это. Спасибо:) – pablof

+0

Боюсь, этого недостаточно. Я не могу идентифицировать в массиве params, какие параметры сопоставляются с аргументами из исходной функции (например, я мог бы получить isValid (3,3,5), но внутри метода isValid я не знаю, откуда это происходит. получить имя исходных параметров, но не соответствующее. – pablof

Смежные вопросы