Почему я не могу сделать foreach (var Item в DataTable.Rows)? - PullRequest
28 голосов
/ 24 февраля 2010

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

foreach (var Item in DataTable.Rows) {

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

foreach (DataRow Item in DataTable.Rows) {

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

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

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

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

Ответы [ 2 ]

28 голосов
/ 24 февраля 2010

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

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

23 голосов
/ 24 февраля 2010

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

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