Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2013, 17:42   #1
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию Универсальное сравнение объектов

Здравствуйте, возникла такая задача.
Нужно сделать универсальный обработчик логических операций.
На входе функции есть два объекта. На выходе должно быть true или false.
Внутри сравнение значений объектов например оператор ">".

Пытался ковырятся студию, ничего там не нашел. Рефлексия не спасла. Инет также особо не помог. Есть у кого нибудь идеи как это реализовать??

PS перебор типов не очень радует, хочется найти простое и универсальное решение.

Спасибо.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.05.2013, 17:51   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

я если честно не понял что вам надо, но предположу это:
http://msdn.microsoft.com/en-us/library/ms132123.aspx
eval вне форума Ответить с цитированием
Старый 08.05.2013, 18:01   #3
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
я если честно не понял что вам надо, но предположу это:
http://msdn.microsoft.com/en-us/library/ms132123.aspx
Не это не то ...

В общем так:
Функция
Код:
public static bool Larger(object operator1, object operator2)
        {
            return operator1 > operator2;
        }
хочу сделать так:
Код:
int a = 1;
int b = 2;
bool res = Larger((object)a, (object)b);
// ожидается res = false
или так:
Код:
double a = 10;
double b = 2;
bool res = Larger((object)a, (object)b);
// ожидается res = true
Но сравнивать объекты низя, нужно сравнить именно значения объектов
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.05.2013, 18:09   #4
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

проверять IComparable у них и компарить, опять не?
eval вне форума Ответить с цитированием
Старый 08.05.2013, 18:10   #5
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
проверять IComparable у них и компарить, опять не?
Мне нужно реализовать все логические операции ... Ваш совет сможет это сделать??
Можно примерчик?
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.05.2013, 18:17   #6
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Где реализовать, в одном методе? бррр ничего не понимаю
если объект реализует IComparable, то можно привести его к этому интерфейсу и вызвать CompareTo - ((IComparable)a).CompareTo(b)
eval вне форума Ответить с цитированием
Старый 08.05.2013, 18:20   #7
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
Где реализовать, в одном методе? бррр ничего не понимаю
если объект реализует IComparable, то можно привести его к этому интерфейсу и вызвать CompareTo - ((IComparable)a).CompareTo(b)
Да в функцию могут передатся совершенно любые объекты и их нужно сравнить. Приведенная функция должна вернуть true если оператор один больше оператора 2. А операторами могут быть и int и string и float и собственный объект.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.05.2013, 18:30   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ну так а я что вам написал?
абстрактные объект так сравнить низя, зя только тот который умеет сам сравниваться
ибо как сравнить такие:
Код:
var a = new { x = 5, y = 0 };
var b = new { x = 0, y = 5 };
?
eval вне форума Ответить с цитированием
Старый 08.05.2013, 18:34   #9
WorldMaster
Старожил
 
Аватар для WorldMaster
 
Регистрация: 25.08.2011
Сообщений: 2,841
По умолчанию

Так выход то какой??
У меня гарантировано будут переданы стандартные типы ... никаких массивов ..
Вижу только делать свич кэйс ... со списком возможных типов и привеению к ним ...
Но боюсь что это отразится на скорости выполнения. Да и хочется верить что MS уже подумали за меня. В принципе класс рефлекции достаточно большой и там куча методов чтобы работать с абстрактными понятиями ... авось я чего то не знаю про него.

А в вашем случае функция должна вернуть false потому как это нестандартный тип.
Skype - wmaster_s E-Mail - WorldMasters@gmail.com
Работаем по 3 критериям - быстро, качественно, недорого. Заказчик выбирает любые два.
WorldMaster вне форума Ответить с цитированием
Старый 08.05.2013, 18:39   #10
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

ешкин кот...
так я и сказал начинайте с малого, стандартные реализуют IComparable
http://msdn.microsoft.com/en-us/libr...(v=vs.80).aspx
http://msdn.microsoft.com/en-us/libr...em.string.aspx
, следовательно уже много кейсов отпадет, а дальше либо обязать попадать в ваш метод только IComparable, либо чтобы те кто попал чего-то еще могут
eval вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление своих объектов в Добавление своих объектов в двунаправленный кольцевой список voidmain C# (си шарп) 3 21.03.2013 13:08
Универсальное событие в JavaScript Vervolf JavaScript, Ajax 6 25.12.2011 17:00
Создание и уничтожение объектов. Время жизни объектов C++/C# Anett// Помощь студентам 0 24.10.2011 23:26
сравнение двух объектов одного класса SAMOUCHKA Общие вопросы C/C++ 5 23.10.2011 17:18