Подтвердить что ты не робот

Почему я не могу сделать foreach (var Item в DataTable.Rows)?

Есть ли причина, по которой я не могу сделать следующее:

foreach (var Item in DataTable.Rows) {

вместо того, чтобы делать

foreach (DataRow Item in DataTable.Rows) {

Я бы подумал, что это возможно, как в других типах данных. Например:

foreach (var Employee in Staff) { // string[] Staff etc...

Когда я пытаюсь выполнить первый цикл foreach, я получаю сообщение об ошибке CS0021: Невозможно применить индексирование с [] к выражению типа "объект" .

Почему компилятор не может понять, что .Rows возвращает коллекции DataRows?

4b9b3361

Ответ 1

Rows эффективно возвращает IEnumerable (DataRowCollection), поэтому компилятор может выбрать только object как тип для var. Используйте Rows.Cast<DataRow>, если вы хотите использовать var.

Cast определяется на Enumerable, поэтому вам нужно включить System.Linq.

Ответ 2

Брайан абсолютно прав насчет причины этого, но есть более простой способ избежать этого: используйте DataTableExtensions.AsEnumerable():

foreach (var row in DataTable.AsEnumerable())
{
    ...
}