Работа с типом Object: как лучше реализовать приведение типов и сравнение - C#

Узнай цену своей работы

Формулировка задачи:

Добрый день Такая задача, есть COM-объект возвращающий по запросу некие переменные другой программы, которые могут быть типа: Integer, String, Double, Float, Boolean. Логика программы определяется пользователем во внешнем файле, то есть порядок таков:

Считать файл настройки

Листинг программы
  1. <Tag type="float">LICA214.PV</Tag>

Считать файл поведения

Листинг программы
  1. <Condition type="More">
  2. <Tag>LICA214.PV</Tag>
  3. <Arg>100</Arg>
  4. </Condition>
  5. <Action>
  6. <Activity type="SendMessage" value="Alarm!"/>
  7. </Action>

Далее в цикле обратиться к СOM-за значением. Проверить условие Condition, если верно выполнить Activity

Ясно что в .net все эти переменные попадают упакованными в Object (впрочем заранее известно какого типа эти переменные), а XML-файле в String. Трудности начинаются когда необходимо сравнить эти переменные (на равенство, больше, меньше), как лучше реализовать приведение типов и сравнение?

Решение задачи: «Работа с типом Object: как лучше реализовать приведение типов и сравнение»

textual
Листинг программы
  1.         private static int CompareTo(object value, object arg)
  2.         {
  3.             try
  4.             {
  5.                 /*Используем рефлексию для сравнения типов*/
  6.                 Type type = value.GetType();
  7.  
  8.                 System.Reflection.MethodInfo minfo = type.GetMethod("CompareTo", new Type[] { typeof(object) });
  9.  
  10.                 int result = (int)minfo.Invoke(value, new object[] { arg });
  11.  
  12.                 return result;
  13.             }
  14.             catch (Exception ex)
  15.             {
  16.                 throw new Exception(string.Format("Ошибка при попытке сравнить [{0}] типа [{1}] c [{2}] типа [{3}]. "
  17.                     + ex.Message,
  18.                     value,
  19.                     value.GetType().Name,
  20.                     arg,
  21.                     arg.GetType().Name)
  22.                     );
  23.             }
  24.         }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы