Похоже, мы могли бы просто иметь нормальное статически проверенное задание. Я не уверен, что вижу в этом преимущество. Что мне не хватает?Что думает о том, что для foreach применяется тип переменной?
ответ
Проблема заключается в том, что foreach
был разработан до дженериков, которых не было до .NET 2.0. С .NET 1.1, если вы использовали класс коллекции, свойство IEnumerator
интерфейса Current
всегда возвращает System.Object
.
Имея Еогеасп сделать бросок, вы могли бы написать:
foreach(string item in collection)
Вместо того, чтобы явно написать:
foreach(object temp in collection)
{
string item = (string)temp;
Конечно, с .NET 2, это не проблема больше ,
История foreach
предшествует общим IEnumerable
и поэтому облегчает перечисление таких коллекций, как ArrayList
. Теперь, когда .NET имеет общие коллекции, а ArrayList
редко используется, свободное литье действительно похоже на несоответствие импеданса тем, как оно было бы разработано, если бы эта функция была добавлена.
Тем не менее, теперь, когда у нас есть функция, вы по-прежнему видите, что люди используют ее даже в общих коллекциях, чтобы отбросить их по типу, который они знают, тем самым избегая нескольких строк кода. Это не слишком далеко от того, как он использовался в ArrayList
днях.
- 1. F # думает, что мой тип не определен
- 2. Что думает Apple о полных веб-приложениях?
- 3. Что думает R о векторе дат?
- 4. Что компилятор думает о switch-statement?
- 5. О том, что инструкция else
- 6. Sqlite думает, что отсутствие привязок
- 7. Статические утверждения о том, что тип не имеет данных.
- 8. Определение класса думает, что установка переменной - это единица?
- 9. Что означает тип переменной Object?
- 10. git думает, что файлы изменились
- 11. Метод думает, что это конструктор
- 12. Python думает, что кодирует неправильно
- 13. Как судить о том, что тип данных переменной javascript является массивом?
- 14. Почему компилятор думает, что я не назвал тип векторного var?
- 15. Уведомление о том, что импорт iCloud начался
- 16. Что я слышал о том, что табличный тег устарел?
- 17. Уведомление о том, что поток уничтожен
- 18. Отчет о том, что удаляется оптимизацией ProGuard
- 19. ошибка о том, что SyntaxError: неверный синтаксис
- 20. Почему R думает, что проекционные данные разные?
- 21. gcc confused о том, что такое lvalue?
- 22. SQL: отчет о том, что там нет
- 23. Уведомление ведущего о том, что модель изменилась
- 24. Уведомление о том, что пользователи меняют информацию
- 25. Смутно о том, что точно имеет значение
- 26. Уведомление о том, что звук или вибрация?
- 27. Напишите отчет о том, что сделало оболочку
- 28. Как узнать о том, что активность возвращается
- 29. Visual Studio думает, что функции уже определены?
- 30. Почему Apple думает, что я показываю рекламу?
Можете ли вы быть более явным? – Adi
@Adi: Foreach работает с не общим «IEnumerable» и добавит неявное преобразование. Я считаю, что это то, о чем здесь говорит Дехас ... –
Meh ... Использовать 'var' - проблема испаряется (вы не можете ничего сделать, кроме правильного/no-op) –