tipo - Uso de C#var para la tipificación implícita de System.Data.Datarow
llenar datatable con linq c# (4)
foreach (var row in table.Rows)
{
DoSomethingWith(row);
}
Suponiendo que estoy trabajando con un System.Data.DataTable
estándar (que tiene una colección de objetos System.Data.DataRow
), la variable ''fila'' anterior se resuelve como un tipo de object
, no un System.Data.DataRow
.
foreach (DataRow row in table.Rows)
{
DoSomethingWith(row);
}
Funciona como yo esperaría. ¿Hay alguna razón en particular para esto?
Gracias.
Eso es porque Rows
es DataRowCollection
, que a su vez es IEnumerable
y no IEnumerable<DataRow>
, lo que significa que el tipo inferido será un object
.
Cuando declara explícitamente el tipo en foreach
, le indica a c # que agregue la conversión a cada llamada, razón por la cual funciona.
Prueba esto:
System.Data.DataTable dt = new System.Data.DataTable();
foreach (var row in dt.Rows.Cast<System.Data.DataRow>())
{
}
Para usar Rows.Cast tienes que usar System.Linq.
Un elenco implícito sucede. También tenga en cuenta que se puede lanzar una excepción InvalidCastException si el lanzamiento no es posible.
table.Rows
es un DataRowCollection que es IEnumberable
(y no IEnumerable<T>
, T es DataRow
), por lo que no está tipificado en una DataRow
, sino que es un objeto, es decir, es una colección de objetos.
Hay una extensión de DataTable
que puede usar aunque: http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx
foreach (var row in table.AsEnumerable())
{
}