Есть ли причина, почему я не могу сделать следующего:
foreach (var Item in DataTable.Rows) {
вместо того, чтобы иметь необходимость сделать
foreach (DataRow Item in DataTable.Rows) {
Я думал бы, что это было возможно, как он находится на других типах данных. Например:
foreach (var Employee in Staff) { // string[] Staff etc...
Когда я пробую первый цикл foreach, я получаю ошибку CS0021: не Может применить индексацию с [] к выражению типа 'объект'.
Почему компилятор не может выяснить, что.Rows возвращает наборы DataRows?
Строки
фактически возвращает IEnumerable
( DataRowCollection
), поэтому компилятор может выбрать только объект
в качестве типа для var
. Используйте Rows.Cast
, если вы хотите использовать var
.
Приведение
определено в Enumerable , поэтому необходимо включить System.Linq.
Брайан абсолютно прав насчет причины этого, но есть более простой способ избежать этого: используйте DataTableExtensions.AsEnumerable () :
foreach (var row in DataTable.AsEnumerable())
{
...
}