С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
3 / 3 / 1
Регистрация: 10.03.2011
Сообщений: 39

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

14.05.2012, 19:16. Показов 3512. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день

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

Логика программы определяется пользователем во внешнем файле, то есть порядок таков:

Считать файл настройки
XML
1
<Tag type="float">LICA214.PV</Tag>
Считать файл поведения
XML
1
2
3
4
5
6
7
<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. Трудности начинаются когда необходимо сравнить эти переменные (на равенство, больше, меньше), как лучше реализовать приведение типов и сравнение?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.05.2012, 19:16
Ответы с готовыми решениями:

Приведение типов object
Есть класс class Class&lt;T&gt; Надо сделать приведение типов из Object в Class&lt;T&gt;. Object obj; Class&lt;T&gt; c = (Class&lt;T&gt;) obj; ...

Что быстрее будет работать сравнение или (сложение и приведение типов)?
Эти строчки if(h == 0xffffffff) { code_1 } else { code_2 } или if(h + 1) { code_2 } else { code_1 }

Работа с командной строкой, приведение типов
Добрый день! Подскажите, пожалуйста, такой вопрос. Я считываю аргументы командной строки через int argc, char *argv, и мне нужно...

3
 Аватар для Smekalisty
42 / 42 / 7
Регистрация: 23.04.2010
Сообщений: 93
14.05.2012, 23:49
приведение типов, если 100% знаешь какого типа то так
C#
1
2
object obj = "abc";
var str = (string) obj;
если не точно лучше так
C#
1
2
3
4
5
6
object obj = "abc";
var str = obj as string;
if (str != null)
{
    //TODO
}
так же посмотри System.Convert

Сравнивать незнаю в чем сложность? > == < Equals имеется в виду?
0
3 / 3 / 1
Регистрация: 10.03.2011
Сообщений: 39
15.05.2012, 17:15  [ТС]
Нет суть в другом, на этапе компиляции мне известно достоверно какого типа объект храниться в переменной object (это может быть float, int, double, string) типы object нельзя сравнивать, только проверять на равенства, необходимо обязательно проводить к тому или иному типу. Вопрос решил путем применения рефлексии, т. е. :

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
        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)
                    );
            }
        }
0
 Аватар для FreedomHex
43 / 44 / 12
Регистрация: 01.09.2011
Сообщений: 213
15.05.2012, 17:36
Ну и ещё классический Parse() и TryParse()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.05.2012, 17:36
Помогаю со студенческими работами здесь

Работа с файлами (массив приведение типов) Visual studio
Будте добры, помогите разобраться с задачей: в текстовом файле хранится целочисленная матрица. Преобразовать ее в вещественную и вывести на...

Чем лучше реализовать наследование типов товаров/материалов/классов
В общем хочу сделать сайт, в котором юзер через интерфейс сможет создавать типы товаров и определять их наследование. Например, создал он...

Как работает приведение типов
Решил создать новую тему, так как вообще не понимаю, каким образом C++ преобразует один тип в другой. Я например пишу: char s = '5'; ...

Как работает приведение типов
#include &lt;stdio.h&gt; int main(void) { printf(&quot;%d&quot;, (int*)3 + 4); return 0; } То что выведется 19 проверить можно. Но...

Не требуется приведение типов при умножении типов Byte
Читал тут книгу(Г. Шилдт, &quot;Полный справочник по C#&quot;), и нашел такое (ст. 77) Поскольку при умножении, например, 2 чисел типа byte,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru