Почему var выводит тип объекта, а не XmlNode в цикле XmlNodeList?

Если пройти через XmlNodeList, как этот

foreach (XmlNode foo in xmlNodeList) {string baa = foo.Attributes["baa"].Value;}

, все работает, как ожидалось - foo явно относится к типу XmlNode и VS.NET IDE показывают методы и поля.

С другой стороны,

foreach (var foo in xmlNodeList) { string baa = foo.Attributes["baa"].Value; }

не компилируется, потому что здесь foo имеет тип объект . Тип вывода работает, но выводит объект .

Очевидно, элементы XmlNodeList не относятся к одному определенному типу, но назначение их XmlNode вместо var делает что-то неявно (преобразование или распаковка).

Первый вопрос: каков механизм этого?

Второй (связанный) вопрос: как найти типы, которые можно использовать в этом виде цикла? Помогает ли VS.NET IDE?

8
задан Olaf 3 February 2012 в 10:28
поделиться