Сразу было понятно, что писать на каждое поле это действие - труд бестолковый и никому не нужный, кроме того, если потом кто-то захочет добавить/удалить поля исходной структуры, то потребуется переписывать заново код.
И тут, как говорится, нам на помощь приходит .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) - получается значение этой переменной в экземпляре этой структуры.
Ну, а так-бы получилось без использования этой чудо фичи:
- if (zt.iPosition != _zt.iPosition)
- {
- ZTVarChanded("iPosition", zt.iPosition.ToString());
- }
* This source code was highlighted with Source Code Highlighter.
//И ещё примерно 200 таких блоков на каждое поле структуры
PS:
У структуры можно получить всё, что угодно, например, можно получить вообще все члены для этого всего навсего используется чудо функция GetMembers();
Комментариев нет:
Отправить комментарий