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

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

14.05.2012, 19:16. Показов 3509. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
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? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru