вторник, 6 октября 2009 г.

Как получить список всех полей(методов, etc) у Структуры(класса) в .Net

Дано: есть структура(несколько структур) с огромным количеством полей. задача: проделать однотипные действия с этими полями.
Сразу было понятно, что писать на каждое поле это действие - труд бестолковый и никому не нужный, кроме того, если потом кто-то захочет добавить/удалить поля исходной структуры, то потребуется переписывать заново код.
И тут, как говорится, нам на помощь приходит .net reflection
больше говорить нечего, исходник говорит сам за себя:


FieldInfo[] fields = typeof(TRZU).GetFields();//Тут получили все поля структуры
foreach (FieldInfo mi in fields)
{
//...
ZTVarChanded(mi.Name, mi.GetValue(rzu).ToString());
}


* This source code was highlighted with Source Code Highlighter.

как нетрудно догадаться: mi.Name - это имя переменной(короткое имя)
а так mi.GetValue(rzu) - получается значение этой переменной в экземпляре этой структуры.

Ну, а так-бы получилось без использования этой чудо фичи:


  1. if (zt.iPosition != _zt.iPosition)
  2. {
  3. ZTVarChanded("iPosition", zt.iPosition.ToString());
  4. }
* This source code was highlighted with Source Code Highlighter.

//И ещё примерно 200 таких блоков на каждое поле структуры


PS:
У структуры можно получить всё, что угодно, например, можно получить вообще все члены для этого всего навсего используется чудо функция GetMembers();