2011-05-12 2 views
3

Похоже, мы могли бы просто иметь нормальное статически проверенное задание. Я не уверен, что вижу в этом преимущество. Что мне не хватает?Что думает о том, что для foreach применяется тип переменной?

+1

Можете ли вы быть более явным? – Adi

+1

@Adi: Foreach работает с не общим «IEnumerable» и добавит неявное преобразование. Я считаю, что это то, о чем здесь говорит Дехас ... –

+0

Meh ... Использовать 'var' - проблема испаряется (вы не можете ничего сделать, кроме правильного/no-op) –

ответ

3

Проблема заключается в том, что 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, это не проблема больше ,

1

История foreach предшествует общим IEnumerable и поэтому облегчает перечисление таких коллекций, как ArrayList. Теперь, когда .NET имеет общие коллекции, а ArrayList редко используется, свободное литье действительно похоже на несоответствие импеданса тем, как оно было бы разработано, если бы эта функция была добавлена.

Тем не менее, теперь, когда у нас есть функция, вы по-прежнему видите, что люди используют ее даже в общих коллекциях, чтобы отбросить их по типу, который они знают, тем самым избегая нескольких строк кода. Это не слишком далеко от того, как он использовался в ArrayList днях.

Смежные вопросы