istudent Ответов: 1

Как получить значение одного из вложенных классов вместе с основным классом.


I have nested class which has two properties. 
I need to get value of one the of the nested class along with main class.

		foreach (var row in reportRowList)
            {
                var k = row;
                List<object> dataRow = new List<object>();
                properties.ForEach(p =>
                {

                    dataRow.Add(p.GetValue(row));
                   
                });

                table.Rows.Add(dataRow.ToArray());
            }
			
			Below is my code. How do i extend GetValue Method of PropertyInfo to retrieve nested object properties 


Что я уже пробовал:

public static Object GetPropValue(this Object obj, String propName)
       {
           string[] nameParts = propName.Split('.');
           if (nameParts.Length == 1)
           {
               return obj.GetType().GetProperty(propName).GetValue(obj, null);
           }

           foreach (String part in nameParts)
           {
               if (obj == null) { return null; }

               Type type = obj.GetType();
               PropertyInfo info = type.GetProperty(part);
               if (info == null) { return null; }

               obj = info.GetValue(obj, null);
           }
           return obj;
       }

BillWoodruff

Во-первых, почему вы используете отражение ?

istudent

Для общего кода для создания excel в приложении.

1 Ответов

Рейтинг:
0

Gerry Schmitz

obj = info.GetValue(obj, null);


В этот момент вы вызываете GetPropValue (), чтобы получить "свойства вложенного класса"; страхуя, конечно, вы только "ныряете" вниз на 1 дополнительный уровень в этом случае.

Другое дело, как вы предоставляете свои целевые свойства для вложенного класса: 2 списка / строки?


istudent

Если вы смотрели на код, а не на тот, который я пробовал, я повторяю свойства, полученные для объекта row, извлекаю значение из объекта и добавляю их в строку данных в таблице. То, что я пробовал, было то, что я получил это из поиска Google, который всегда имеет имя объекта и возвращает null

istudent

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