Набор данных C# foreach

Я использую DataSet, и при итерации по столбцам с циклом foreach я не могу получить ColumnName (если используется ключевое слово var):

например.

DataTable table1 = new DataTable("patients");
table1.Columns.Add("name");
table1.Columns.Add("id");
table1.Rows.Add("sam", 1);
table1.Rows.Add("mark", 2);

И чем используя foreach:

Введите описание изображения здесь

Но если оператор foreach явно определен:

Введите описание изображения здесь

Все в порядке.
Я знаю, что foreach-синтаксический сахар для перечислителя.
Это какое-то наследие и отсутствие дженериков ?

2 ответа

  1. Это какое-то наследие и отсутствие дженериков?

    Да. Этот код был написан на языке C# 1.0 до появления дженериков.

  2. объект DataTable.Столбцы-это DataColumnCollection. DataColumnCollection реализует IEnumerable, а не IEnumerable<DataColumn>. Инструкция foreach выполняет приведение для указанного типа. Var указывает, что возвращает метод перечислителя (в данном случае-Object).