Имя аргумента конструктора в c # - PullRequest
17 голосов
/ 07 июля 2011

У меня есть требование, в котором мне нужно получить имена переменных конструктора в моем классе.Я пробовал это с помощью отражения C #, но constructorinfo не дает достаточной информации.Поскольку он предоставляет только тип данных параметров, но я хочу имена, например

class a
{    
    public a(int iArg, string strArg)
    {
    }
}

Теперь я хочу "iArg" и "strArg"

Спасибо

Ответы [ 2 ]

35 голосов
/ 07 июля 2011

Если вы вызовете ConstructorInfo.GetParameters(), вы получите обратно массив ParameterInfo объектов, который имеет свойство Name, содержащее имя параметра.

См. эту страницу MSDN для получения дополнительной информации и образца.

В следующем примере выводится информация о каждом параметре конструктора класса A:

public class A
{
    public A(int iArg, string strArg)
    {
    }
}

....

public void PrintParameters()
{
    var ctors = typeof(A).GetConstructors();
    // assuming class A has only one constructor
    var ctor = ctors[0];
    foreach (var param in ctor.GetParameters())
    {
        Console.WriteLine(string.Format(
            "Param {0} is named {1} and is of type {2}",
            param.Position, param.Name, param.ParameterType));
    }
}

Приведенные выше образцы отпечатков:

Param 0 is named iArg and is of type System.Int32
Param 1 is named strArg and is of type System.String
5 голосов
/ 07 июля 2011

Я только что проверил MSDN на ваш вопрос.Как я вижу, любой экземпляр ConstructorInfo может предоставить вам метод GetParameters().Этот метод возвращает ParameterInfo[] - и любой ParameterInfo имеет свойство Имя .Так что это должно сделать трюк

 ConstructorInfo ci = ...... /// get your instance of ConstructorInfo by using Reflection
 ParameterInfo[] parameters = ci.GetParameters();

 foreach (ParameterInfo pi in parameters)
 {
      Console.WriteLine(pi.Name);  
 }

, вы можете проверить msdn GetParameters () для любой дополнительной информации.

hth

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...