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

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

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

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

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

<Tag type="float">LICA214.PV</Tag>

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

<Condition type="More">
   <Tag>LICA214.PV</Tag>
   <Arg>100</Arg>
</Condition>
<Action>
  <Activity type="SendMessage" value="Alarm!"/>
</Action>

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

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

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

textual
Листинг программы
        private static int CompareTo(object value, object arg)
        {
            try
            {
                /*Используем рефлексию для сравнения типов*/
                Type type = value.GetType();
 
                System.Reflection.MethodInfo minfo = type.GetMethod("CompareTo", new Type[] { typeof(object) });
 
                int result = (int)minfo.Invoke(value, new object[] { arg });
 
                return result;
            }
            catch (Exception ex)
            {
                throw new Exception(string.Format("Ошибка при попытке сравнить [{0}] типа [{1}] c [{2}] типа [{3}]. "
                    + ex.Message,
                    value,
                    value.GetType().Name,
                    arg,
                    arg.GetType().Name)
                    );
            }
        }

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


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

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

10   голосов , оценка 4 из 5
Похожие ответы