Por qué no puedo hacer foreach (var artículo en DataTable.Rows)?
Pregunta
¿Hay alguna razón por la que no puede hacer lo siguiente:
foreach (var Item in DataTable.Rows) {
en lugar de tener que hacer
foreach (DataRow Item in DataTable.Rows) {
Me habría pensado que esto era posible, como lo es en otros tipos de datos. Por ejemplo:
foreach (var Employee in Staff) { // string[] Staff etc...
Cuando intento del primer bucle foreach, me sale el error CS0021:. No se puede aplicar la indexación con [] a una expresión del tipo 'objeto'
¿Por qué no la cifra compilador que .Rows devuelve una colección de DataRows?
Solución
Rows
regresa efectivamente IEnumerable
(DataRowCollection
), por lo que el compilador sólo puede recoger object
como el tipo de var
. Uso Rows.Cast<DataRow>
si desea utilizar var
.
Cast
está definido en Enumerable , así que hay que incluir Sistema .Linq.
Otros consejos
Brian tiene toda la razón acerca de la razón de esto, pero hay una manera más sencilla de evitarlo: el uso DataTableExtensions.AsEnumerable () :
foreach (var row in DataTable.AsEnumerable())
{
...
}