2012-05-16 3 views
0

Я пробовал в течение 2 дней, чтобы найти что-то, что сработает, и ни один из найденных мной примеров не работает.Использование Reflection для обнаружения списка свойств объектов

Что мне нужно - это получить список общедоступных свойств из экземпляра класса.

Например:

MyClass имеет следующее определение:

public class MyClassSample : MyDC 
{ 
    public string ReportNumber = ""; 
    public string ReportDate = ""; 

    public MyClassSample() 
    { 
    } 
} 

Что мне нужно, это способ просто возвращает массив, который имеет [ "ReportNumber"] [ "ReportDate"] в нем от вышеупомянутый класс.

Вот моя последняя попытка, просто добавить имена свойств в строку:

string cMMT = ""; 

    Type t = atype.GetType(); 
    PropertyInfo[] props = t.GetProperties(); 
    List<string> propNames = new List<string>(); 
    foreach (PropertyInfo prp in props) 
    { 
     cMMT = cMMT + prp.Name + "\n"; 
    } 

Я думаю, что я пропускаю что-то основной и простой, но по некоторым причинам я не могу увидеть его прямо сейчас. Любая помощь будет оценена по достоинству.

+2

Я предлагаю вам узнать разницу между полями и свойствами, прежде чем погрузиться в размышления;) –

+0

Пожалуйста, прочитайте также эту статью, как обращаться со строкой http://www.dotnetperls.com/convert-list-string –

ответ

6

Это не недвижимость. Это поля.

Таким образом, вы можете сделать это:

FieldInfo[] fields = t.GetFields(); 

Или вы можете изменить эти свойства в:

public string ReportNumber { get; set; } 
public string ReportDate { get; set; } 
+0

Это решило ее ... Спасибо! –

1

изменения этого

public string ReportNumber = ""; 
public string ReportDate = ""; 

к этому

public string ReportNumber { get; set; } 
public string ReportDate { get; set; } 

, а затем,

List<string> propNames = new List<string>(); 

foreach (var info in atype.GetType().GetProperties()) 
{ 
    propNames.Add(info.Name); 
} 

Результат пустошь быть списком (PROPNAME) с двумя позициями с именем вашего свойства

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