Почему я не могу сделать 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?
Ответы
Ответ 1
Rows
эффективно возвращает IEnumerable
(DataRowCollection
), поэтому компилятор может выбрать только object
как тип для var
. Используйте Rows.Cast<DataRow>
, если вы хотите использовать var
.
Cast
определяется на Enumerable, поэтому вам нужно включить System.Linq.
Ответ 2
Брайан абсолютно прав насчет причины этого, но есть более простой способ избежать этого: используйте DataTableExtensions.AsEnumerable():
foreach (var row in DataTable.AsEnumerable())
{
...
}