Почему я не могу выполнить foreach (элемент var в DataTable.Rows)?

StackOverflow https://stackoverflow.com/questions/2325777

Вопрос

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

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())
{
    ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top