Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Тип и 'экземпляр' типа, применение к дженерикам (generic) 
:(
    Опции темы
marcusmae
Дата 4.8.2006, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Есть 'экземпляр' типа

Код

System.Type type;


и есть generic с типом T, который требуется задействовать

Код

System.Collections.Generic.List<T>() {... }


(Извиняюсь за самопальные термины, но, в IDE вообще и то и другое называтся type, хотя не одно и тоже.)

На месте T, как я понимаю, должен стоять именно тип, а не его 'экземпляр'.
С помощью typeof(...) и GetType() (не одно и тоже ли?) можно получить 'экземпляр' типа, имея тип. Обратная операция, по-видимому, невозможна уже исходя из самых общих соображений. Неоднозначность. Наверно, можно только перебором найти совместимый тип, имея 'экземпляр' типа. Или я ошибаюсь? = А что бы Вы стали делать, если дан 'экземпляр' типа, а не тип, и по нему нужно вызвать generic?


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Void
Дата 4.8.2006, 17:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


λcat.lolcat
****


Профиль
Группа: Участник Клуба
Сообщений: 2206
Регистрация: 16.11.2004
Где: Zürich

Репутация: 25
Всего: 173



Код
using System.Collections.Generic;
...
Type type = ...;
object list = Activator.CreateInstance(typeof(List<>).MakeGenericType(t));



--------------------
“Coming back to where you started is not the same as never leaving.” — Terry Pratchett
PM MAIL WWW GTalk   Вверх
marcusmae
Дата 4.8.2006, 18:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Ого, интересно! Спасибо smile
Подумаю, но пока кажется, что с конверсией object в List (особенно, с вложениями List<List<...>>) придётся повозиться... 

вот какой фрагмент :

Код

        private Image Draw(Image SourceImage, ViewArgs v, Type Aquracy)
        { 
            Object aquracyPoint =
                Activator.CreateInstance(typeof(AquracyPoint<>).MakeGenericType(Aquracy));
            Object weightPolygon =
                Activator.CreateInstance(typeof(List<>).MakeGenericType(
                aquracyPoint.GetType()));

            Object WeightPolygonsCollection =
                Activator.CreateInstance(typeof(List<>).MakeGenericType(
                weightPolygon.GetType()));

            ... ... ...

            ((List<?>)  // ? ~ weightPolygon
                WeightPolygonsCollection).Add(polygon.BuildWeightPolygon<?>());  // ? ~ Aquracy
        }



--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1229 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.