Почему я не могу сделать foreach (Объект var в DataTable. Строки)?

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

foreach (var Item in DataTable.Rows) {

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

foreach (DataRow Item in DataTable.Rows) {

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

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

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

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

28
задан Brian Rasmussen 18 August 2010 в 18:09
поделиться

2 ответа

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

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

28
ответ дан 28 November 2019 в 03:13
поделиться

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

foreach (var row in DataTable.AsEnumerable())
{
    ...
}
23
ответ дан 28 November 2019 в 03:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: