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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.06.2011, 16:04   #1
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию Приведение к заранее неизвестному типу

Можно как-нибудь привести object к типу, который заранее не известен?

Код:
using System;

class Program
{
	static int Main ()
	{
		object a = 36.6;
		object b = 24.0;

		Type myType = a.GetType();


		if (a > b)			// ошибка: нельзя сравнивать object-ы
			return 1;
		if ((myType)a > (myType)b)	// ошибка: компилятор не знает, к чему приводить объекты
			return 1;

		return 0;
	}
}

Последний раз редактировалось ds.Dante; 09.06.2011 в 13:14.
ds.Dante вне форума Ответить с цитированием
Старый 08.06.2011, 16:59   #2
m0nax
Форумчанин
 
Аватар для m0nax
 
Регистрация: 25.09.2009
Сообщений: 525
По умолчанию

можно привести их к IComparable и сравнить
Код:
               object a = 36.6;
            object b = 24.0;

            if (((IComparable)a).CompareTo(b) == 1)		
            {
                //a больше b
            }
m0nax вне форума Ответить с цитированием
Старый 08.06.2011, 17:08   #3
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

То, что надо.

Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его m0nax. :)
ds.Dante вне форума Ответить с цитированием
Старый 09.06.2011, 11:51   #4
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

А чтобы сложить два объекта?
ds.Dante вне форума Ответить с цитированием
Старый 09.06.2011, 12:52   #5
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Как сложить то что не известно что.
Guy вне форума Ответить с цитированием
Старый 09.06.2011, 13:11   #6
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Так же, как и сравнивать. :)
ds.Dante вне форума Ответить с цитированием
Старый 09.06.2011, 14:46   #7
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Сравнение это побайтовая операция сравнения между объектами. А то что вы спрашиваете пройдёт тока с типизированными объектами. Как это тебе представляется ?
Guy вне форума Ответить с цитированием
Старый 09.06.2011, 16:37   #8
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Сравнение больше/меньше - не побайтовая операция. Тут тоже типизация (приведение к интерфейсу) была нужна.

В принципе, проблема решена - я могу всё приводить к int. Но всё же интересно, можно ли складывать объекты неизвестного типа.

Последний раз редактировалось ds.Dante; 09.06.2011 в 16:41.
ds.Dante вне форума Ответить с цитированием
Старый 09.06.2011, 19:48   #9
veniside
Старожил
 
Регистрация: 03.01.2011
Сообщений: 2,508
По умолчанию

в С# 4.0 ввели поддержку DLR, т.е. динамического связывания:

Код:
static dynamic Mean (dynamic x, dynamic y)
{
  return (x + y) / 2;
}

static void Main()
{
  int x = 3, y = 5;
  Console.WriteLine (Mean (x, y));
}
естественно, никакой проверки типов при компиляции не делается, если написать:

Код:
string s = Mean (3, 5);
получим ошибку на этапе выполнения.
Можно слегка помочь компилятору, наваяв нечто вроде:

Код:
static T Mean<T> (T x, T y)
{
  dynamic result = ((dynamic) x + y) / 2;
  return (T) result;
}
"Когда приходит положенное время, человек перестаёт играть в пинбол. Только и всего."
veniside вне форума Ответить с цитированием
Старый 10.06.2011, 09:52   #10
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Спасибо за инфу.
ds.Dante вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Необходима программа по известному алгоритму Opexoff Фриланс 1 18.05.2010 08:02
Цифры с картинки по известному шрифту. IWTK Общие вопросы Delphi 3 11.04.2010 14:43
Как найти запись по известному внешнему ключу? Илья Сергеевич БД в Delphi 8 04.01.2010 15:30
Приведение к типу __Demon__ Общие вопросы C/C++ 1 27.09.2009 17:40
Как в коде VBA возвратить путь к заранее известному файлу? Maxx Microsoft Office Excel 4 19.11.2008 13:17