85 / 12 / 1
Регистрация: 24.05.2010
Сообщений: 590
1
.NET 4.x

Как привести к строгому типу не зная заранее имя типа?

11.09.2017, 17:46. Показов 1423. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Привет!

Есть такой код:

C#
1
2
3
4
var myClass = "MyClass";
 
Type t = Type.GetType(myClass);
var instance = Activator.CreateInstance(t);
myClass приходит извне, я в примере упростил. В результате я получаю instance в виде object{MyClass}. Хочу из этого получить переменную типа MyClass для передачи дальше. Как это можно сделать?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2017, 17:46
Ответы с готовыми решениями:

Как привести переменную типа Object к типу Double?
Как привести переменную типа Object к типу Double?

Как привести объект базового типа к унаследованному типу
class MyList: List { } class Program { static void Main(string args) ...

Как привести объект пользовательского типа к заданному встроенному типу?
Добрый вечер, у меня есть класс: ref class MessageClass { public: char *senderName;...

Как узнать полное имя файла зная его краткое имя?
например при запуске программы достаточно написать "Excel" или "Calc" при этом система уже в курсе...

5
3279 / 2324 / 661
Регистрация: 02.08.2011
Сообщений: 6,367
11.09.2017, 17:54 2
Переменная instance уже хранит ссылку на объект вашего типа MyClass. Ее и передавайте.
0
Эксперт .NET
11732 / 8058 / 1229
Регистрация: 21.01.2016
Сообщений: 30,347
11.09.2017, 18:43 3
Цитата Сообщение от V0fka Посмотреть сообщение
myClass приходит извне, я в примере упростил. В результате я получаю instance в виде object{MyClass}. Хочу из этого получить переменную типа MyClass для передачи дальше. Как это можно сделать?
Использовать приведение типа? Только тут один нюанс есть: вы должны заранее (в коде) знать с каким типом работаете. Если вы всегда ожидаете один и тот же тип, то рефлексия тут не нужна. Если типи могут быть разными, то нужно будет в коде же прописать все сопоставления (какой объект какого типа куда передавать).
1
1272 / 973 / 113
Регистрация: 12.01.2010
Сообщений: 1,971
11.09.2017, 22:03 4
вместо ручных сопоставлений можно доверить это перегруженным методам и приведению к dynamic
foo((dynamic)instance );

и нужное количество методов типа
void foo(myclass obj){}
void foo(youclass obj){}
void foo(badclass obj){}
2
85 / 12 / 1
Регистрация: 24.05.2010
Сообщений: 590
13.09.2017, 10:48  [ТС] 5
IamRain, так, к сожалению, не работает, т.к. вызываемый метод ожидает не object, а конкретный тип и компилятор на это дело ругается.

Usaga, я ещё пример упростил когда писал и не придал значения изначально тому, что на самом деле у меня классы идут с уточнением типов (MyClass<T>) и вот привести нужно с учетом T, которое тоже неизвестно. Поэтому, наверное, придется делать, как вы сказали. Спасибо за ответ!

m0nax, ух ты! В принципе, это, наверное то, что я хотел. Но ввиду того, что заранее неизвестно не имя класса, не тип, который его уточняет, получается, что будет дофига перегрузок и в случае добавления нового типа или уточнения типа нужно все равно лезть в код и писать нужную перегрузку, а именно от этого хотел уйти. Но это уже проблема проектирования самой программы. А так то это то, что было нужно. Спасибо за ответ!

В общем, хотел сделать универсально, но, наверное, буду руками описывать соответствия конкретных типов, потому что универсально все равно не получится, а описание соответствия руками будет, наверное, более понятно при чтении и сопровождении кода.

Всем спасибо за ответы!
0
Эксперт .NET
11732 / 8058 / 1229
Регистрация: 21.01.2016
Сообщений: 30,347
13.09.2017, 11:26 6
V0fka, не исключено, что имеет место плохая архитектура программы и вполне можно обойтись без подобных выкрутасов с рефлексией.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.09.2017, 11:26
Помогаю со студенческими работами здесь

Как узнать имя процесса, зная имя программы?
Здравствуйте, подскажите пожалуйста, как узнать имя процесса выполняемой программы, зная имя этой...

Как привести к типу во время присвоения?
private function setLevel(): bool { if ($this-&gt;data-&gt;exp &gt;= $this-&gt;data-&gt;exp_max) { ...

Как привести к нужному мне типу
У меня есть класс А, в котором есть поле IMachineInfo mInfo. Я создаю класс Pump, который extends...

Как привести переменную к нужному типу?
Вот фрагмент кода: String otvet = xmlRazbor.razbor(workXML); ...

Как привести переменную к типу long?
Извините за такую тему, но нигде не нашел ответа. Чтобы вбить переменную с клавиатуры типа int...

Как правильно привести тип float к типу int?
Скажите ПОЖАЛУЙСТА гуру с++ float digit = 0.1f; перевести в int как правильно и быстрее ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru