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?

¿Fue útil?

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())
{
    ...
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top