![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
В каких случаях целесообразно использовать IEnumerable<T> и чем он лучше простого IEnumerable ?
Сначала думал можно будет в foreach типы выбираемых значений контролировать, оказалось - нет. В MSDN есть пример стека с использованием IEnumerable<T>, но по-моему его легко и простым IEnumerable реализовать. Ошибка Микрософта? |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0leg, любую логику можно реализовать без использования дженериков. Первый FW тому явное подтверждение.
Но согласишься ли ты использовать ArrayList вместо List<T>? Врядли. Энумераторы используются не только в foreach. Ты ведь его сам можешь использовать, а в таком случае удобнее получать реальный тип T, а не объект foreach возвращает объект только потому что он так закодирован. И изменить его нельзя Это сообщение отредактировал(а) ivashkanet - 5.12.2006, 11:15 |
|||
|
||||
| 0leg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
IEnumerable<T> наследует IEnumerable вместе с его методом GetEnumerator(). Я думал он используется при несовпадении выбираемого типа с типом T, поэтому foreach типы и неконтролирует.
понял |
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
P.S. И вообще, по forech --- он же использует нормальные типы:
|
|||
|
||||
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
||||
|
||||
| ivashkanet |
|
||||||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ну такое нужно еще умудриться написать А что ты предлагаешь?
или может
foreach это просто удобная обертка к
Что можно здесь изменить, чтобы foreach стал безопасен к типам? |
||||||
|
|||||||
| 0leg |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
Если strings реализует IEnumerable<string>, то Current возвращает кокретный тип string и твой пример не скомпилится, в отличие от foreach.
|
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
0leg, не хочу спорить, но иди почитай матчасть про наследование и полиморфизм
Если бы у меня было
То все было бы именно так, как ты сказал. |
|||
|
||||
| 0leg |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 27 Регистрация: 23.11.2006 Репутация: 1 Всего: 1 |
тогда принудительную проверку типов можно было сделать ладно, не мне туда лезть... Итог: Применять IEnumerable<T> только для foreach не стоит. Это мне и надо было. Спасибо. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
||||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 24 Всего: 93 |
А нечто подобное уже есть Метод класса Array.
Используется, например, так:
Это сообщение отредактировал(а) Дрон - 5.12.2006, 17:33 -------------------- Да. Именно так. |
||||
|
|||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Дрон, ага. Классный метод. Только им не особо пользуются.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |