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