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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.08.2012, 15:05   #1
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию динамическое приведение типа

А можно в шарпе динамически привести тип к System.Type ?
the_deer_one вне форума Ответить с цитированием
Старый 25.08.2012, 02:29   #2
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Какой тип? И зачем..?
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 25.08.2012, 08:11   #3
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Цитата:
И зачем..?
Эммм, ну я вообщем и без этого обошёлся. Но всё равно интересно, есть такая возможность или нет.
the_deer_one вне форума Ответить с цитированием
Старый 25.08.2012, 11:14   #4
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Если отвечать на поставленный вопрос именно в вашей формулировке, то можно привести лишь те, которые от него отнаследованы (иерархию классов-наследников от System.Type можно посмотреть например тут: MSDN)
Код:
var result = (System.Type)someObject;
Но я более чем уверен, что на самом деле вам было нужно не это, и вы просто не так поставили вопрос)
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 25.08.2012, 13:13   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

помоему нужно было просто GetType...
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 25.08.2012, 14:28   #6
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Самое гибкое преобразование типов в дотнете - с помощью TypeConverter.
ds.Dante вне форума Ответить с цитированием
Старый 25.08.2012, 17:10   #7
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Selestis
Цитата:
var result = (System.Type)someObject;
Динамически эта инструкция не работает в том смысле, что так можно привести только к наперёд известному типу, ну или шаблонному.

Цитата:
Но я более чем уверен, что на самом деле вам было нужно не это, и вы просто не так поставили вопрос)
Да не, правильно я всё поставил. Эхх, знали бы вы, какие мне извращённые задачки на стажировке дают.
the_deer_one вне форума Ответить с цитированием
Старый 25.08.2012, 18:28   #8
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Интересно стало увидеть эту самую задачу) Не поделитесь?
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Старый 25.08.2012, 19:34   #9
the_deer_one
Участник клуба
 
Аватар для the_deer_one
 
Регистрация: 04.04.2010
Сообщений: 1,554
По умолчанию

Научить список из ряда прошлых заданий хранить данные разных типов одновременно.

Был список BidirectionaList<T> where T : IEquatable<T>
Поначалу я хотел пихать туда Object. Но внезапно оказалось, что Object не реализует интерфейс IEquatable<T>. Вот так вот, метод Equals у него есть, а интерфейса нету. Тогда я просто сделал класс контейнер, реализовал ему этот интерфейс, и в нём хранил object. А в сам контенер пихал объект неявно в переопределённых методах this[], Add и т.д.

MutableList : BidirectionalList<Container>
{
//ряд методов переопределён.



А потом подумал, как можно это же сделать иначе, что можно бы было не специфицировать параметр элемента моего обобщённого списка как IEquatable<T>. Первое что пришло в голову - принимаем элемент типа блаблабла, конструируем на его основе тип Type.GetType("System.IEquatable`1[блаблба]"). Если тип элемента к нему приводится, приводим к нему и вызываем Equals. Но в шарпе можно спокойно приводить к типу с шаблонной переменной -(a is(IEquatable<T>)), и эта извращённая идея потеряла смысл.
the_deer_one вне форума Ответить с цитированием
Старый 25.08.2012, 20:59   #10
Selestis
Форумчанин
 
Аватар для Selestis
 
Регистрация: 21.01.2009
Сообщений: 719
По умолчанию

Тогда в вопросе надо было скзать про генерики, не?) Собственно мой код бы тоже работал, ибо
Код:
var result = (IEquatable<T>)someObject;
выдавал бы исключение в случае если сделать приведение невозможно, и нужный результат, если возможно. Как раз то же самое вы проверили оператором is. Как тут у кого-то из форумчан написано в подписи "правильно поставленный вопрос - это половина ответа")
Изобретатель велосипедов
Selestis вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С - приведение типов onewho Общие вопросы C/C++ 3 21.11.2010 00:12
динамическое приведение типов в java sashonk Общие вопросы по Java, Java SE, Kotlin 13 28.08.2010 23:15
динамическое изменение типа переменной L@m@k Помощь студентам 14 12.08.2010 18:09
Приведение типов в Qt mike_tihomirov Qt и кроссплатформенное программирование С/С++ 1 19.06.2010 13:14
Приведение к типу __Demon__ Общие вопросы C/C++ 1 27.09.2009 17:40