|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
|
Приведение типа IEnumerable к любому типу04.07.2019, 14:40. Показов 5470. Ответов 31
Добрый день.
Задача: на вход метода подается объект, реализующий IEnumerable (строка, массив, список итд.), необходимо выполнить действия с объектом (скажем, удалить все элементы, которые равны и стоят рядом) и вернуть преобразованный объект. Я написал метод расширения IEnumerable, который делает действия с объектом, но он естественно возвращает объект IEnumerable. Как преобразовать IEnumerable в тот же тип объекта, который подается на вход что бы вернуть измененную последовательность?
0
|
|
| 04.07.2019, 14:40 | |
|
Ответы с готовыми решениями:
31
Приведение элементов к типу интерфейса IEnumerable Приведение значения переменной типа char к типу int Как организовать неявное приведение типа перечисления к типу переменной |
|
2810 / 1679 / 885
Регистрация: 14.04.2015
Сообщений: 5,723
|
|
| 04.07.2019, 14:42 | |
|
AldTLT, код в студию
0
|
|
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|||||||
| 04.07.2019, 14:53 | |||||||
0
|
|||||||
|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
|||
| 04.07.2019, 17:41 [ТС] | |||
|
Главное - после запроса преобразовать IEnumerable обратно в нужный тип.
0
|
|||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 04.07.2019, 18:33 | ||
|
Похоже, что если вам надо менять непосредственно источник, то надо принимать не IEnumerable, а ICollection. IEnumerable не обязана гарантировать, что ее реализует класс с каким-то хранилищем.
0
|
||
|
1524 / 914 / 329
Регистрация: 17.05.2015
Сообщений: 3,438
|
|
| 04.07.2019, 18:45 | |
|
0
|
|
|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
||||||||
| 04.07.2019, 20:42 [ТС] | ||||||||
|
Добавлено через 49 минут Вот примерный код:
0
|
||||||||
|
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
|
|
| 04.07.2019, 20:56 | |
|
В T должен быть конструктор принимающий IEnumerable.
После изменений создаете новый обьект T используя этот конструктор
0
|
|
|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
|
| 04.07.2019, 21:27 [ТС] | |
|
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 04.07.2019, 21:35 | ||
|
Если последовательность, то через yield return
0
|
||
|
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
|
|||||||
| 04.07.2019, 21:51 | |||||||
0
|
|||||||
|
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
||
| 05.07.2019, 08:56 | ||
|
query.ToArray() query.ToList() и так далее ToXXX() Причём можно это делать и в отдельном методе после того, как все yield return отработали.
0
|
||
|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
|
| 05.07.2019, 15:00 [ТС] | |
|
0
|
|
|
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 05.07.2019, 15:05 | |
|
AldTLT, знает тот, кто кидает на вход. Соответственно, он же и знает, во что ему превратить последовательность.
Это самый простой выход из проблемы. Альтернатива - в самом методе расширения ковырять рефлексию. Но практика показывает, что ковыряльцы обычно тонут в результатах своего кодерства. Не, я согласен, можно форкнуть проект, расковырять рефлексию. Если вдруг получится, то поставить текст в рамочку и повесить над диваном.
0
|
|
|
0 / 0 / 0
Регистрация: 03.06.2019
Сообщений: 17
|
||
| 05.07.2019, 15:10 [ТС] | ||
|
0
|
||
|
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 05.07.2019, 15:15 | |
|
AldTLT, задача студенческая? Если студенческая, то приведите текст задачи.
Если не студенческая, то скорее всего неправильно поставлено ТЗ. Обычно программист скорее всего подумает, что с 50% вероятности заказчик с исполнителем не поняли друг друга.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 05.07.2019, 15:17 | ||
|
Возможно, вы не так ее поняли и она подразумевает возврат новой последовательности с измененными элементами, но не оригинальный объект, представляющий входящую последовательность.
0
|
||
|
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
|
|
| 05.07.2019, 15:21 | |
|
kolorotur, теоретически реализуемая в частных случаях через рефлексию.
Но код будет классическим образцом Г-кода.
0
|
|
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||||||||||||
| 05.07.2019, 15:52 | ||||||||||||
|
Если я на вход подам что-то вроде такого:
1
|
||||||||||||
| 05.07.2019, 15:55 | |
|
Не по теме: Вы должны добавить отзыв кому-то ещё, прежде чем сможете снова добавить его kolorotur.
0
|
|
| 05.07.2019, 15:55 | |
|
Помогаю со студенческими работами здесь
20
Ошибка при использовании IEnumerable<T>: Использование универсального типа IEnumerable требует аргумент типа 1 Ошибка: Приведение типа DBNull к типу String является недопустимым Приведение одного парметра-типа к другому разыменованному парметру-типу (указателю) в шаблонах Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа.
В качестве фильтра для отбора справочника служит группа номенклатуры.
Отбор по наименованию группы. . .
|
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
|
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс.
Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
|
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа.
В качестве фильтра для отбора служит значение перечислений.
/ / Событие "НачалоВыбора" реквизита на форме. . .
|
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|