Форум программистов, компьютерный форум, киберфорум
Наши страницы
C#: Базы данных, ADO.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
troika
6 / 6 / 2
Регистрация: 06.12.2009
Сообщений: 51
1

Cast<TResult> приведение к заранее неизвестному типу

23.07.2012, 13:00. Просмотров 1815. Ответов 3
Метки нет (Все метки)

Добрый день. У меня есть переменная result типа ArrayList. Привести ее к массиву типа string можно так:
C#
1
string[] mas = result.Cast<string>().ToArray<string>();
к массиву типа int так:
C#
1
int[] mas = result.Cast<int>().ToArray<int>();
Как мне быть, если я заранее не знаю тип к которому мне нужно привести ArrayList? У меня есть только имя класса к которому нужно привести в переменной типа string. Т.е. с помощью рефлексии я могу, например, создать экземпляр этого класса. Никак не могу догадаться как мне передать этот тип в Cast? Быть может можно как-то это реализовать и без linq функции Cast. Это как бы не критично.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.07.2012, 13:00
Ответы с готовыми решениями:

Нетривиальное приведение к типу
Доброго времени суток! Возник вопрос, прошу помощи... Суть проблемы: есть код (получение...

Приведение переменной к типу данных SQL Server
Добрый день. Разрешите начинающему разбираться в C# задать вопрос: При попытке изменения клички...

Приведение к типу, определённому только во время исполнения
В приложении есть список объектов List&lt;Объект&gt; определённых следующим образом: public class Объект...

Как обратиться к заранее неизвестному текстовому полю?
как обратится к текстовому полю которое есть на форме но его имя станет известным только в ...

Приведение к типу
В чем разница? static_cast&lt;int&gt;(a); и (int)a

3
turbanoff
Эксперт Java
4025 / 3760 / 742
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
23.07.2012, 13:09 2
У ArrayList есть метод - ArrayList.ToArray Method (Type).
Вам остается только по имени класса получить Type и передать его в этод метод;
0
troika
6 / 6 / 2
Регистрация: 06.12.2009
Сообщений: 51
23.07.2012, 14:14  [ТС] 3
Цитата Сообщение от turbanoff Посмотреть сообщение
У ArrayList есть метод - ArrayList.ToArray Method (Type).
Вам остается только по имени класса получить Type и передать его в этод метод;
Проблема в том, что ArrayList.ToArray(Type) возвращает же мне System.Array и опять нужна конвертация. Т.е. если у меня в ArrayList экземпляры допустим моего класса AnswData, то мне нужно же написать так (пусть t это переменная типа Type от моего класса AnswData):
C#
1
(AnswData[])result.ToArray(t);
Т.е. опять пропадает обобщенность т.к. в ArrayList может быть и другой мой класс, отличный от AnswData.
0
turbanoff
Эксперт Java
4025 / 3760 / 742
Регистрация: 18.05.2010
Сообщений: 9,330
Записей в блоге: 11
Завершенные тесты: 1
23.07.2012, 15:15 4
Вы же не знаете сам тип массива во время компиляции. Значит вы не можете с ним делать ничего такого, что зависит от типа данных.
А значит вам должно быть все равно как записан массив, object[], AnswData[] или System.Array. Ведь все равно это будет один и тот же массив во время выполнения и действия вы с ним можете делать только те, что можете со всеми тремя сразу.

Тут надо задать вопрос, зачем вам получить массив неизвестного типа? Что вы с ним дальше собираетесь делать?
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2012, 15:15

Приведение к типу
Почему в array нет поля класса а когда привожук типу a? using System; using...

Приведение к рефлексивному типу
Получаю некоторый тип путем: Class.forName(&quot;&quot;) И есть значение, возвращаемое методом, как это...

Приведение к базовому типу
#include &lt;iostream&gt; using namespace std; class A{ public: virtual ~A() {} }; ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru