2012-09-27 9 views
17
foreach (var row in table.Rows) 
{ 
    DoSomethingWith(row); 
} 

Supponendo che sto lavorando con uno standard System.Data.DataTable (che ha una collezione di oggetti System.Data.DataRow), il 'fila' variabile sopra risolve come tipo object , non un System.Data.DataRow.uso di C# var per la tipizzazione implicita System.Data.Datarow

foreach (DataRow row in table.Rows) 
{ 
    DoSomethingWith(row); 
} 

Funziona come mi aspetterei. C'è una ragione particolare per questo?

Grazie.

+2

Duplicato di [Perché non posso fare foreach (var Item in DataTable.Rows)?] (Http://stackoverflow.com/questions/2325777/why-cant-i-do-foreach-var-item- in-datatable-rows) o [Perché var valuta su System.Object in "foreach (var row in table.Rows)"?] (http://stackoverflow.com/questions/2786727/why-does-var-evaluate -per-system-oggetto-in-foreach-var-fila-in-table-rows? Iq = 1). –

risposta

21

Questo perché Rows è DataRowCollection, che a sua volta è IEnumerable e non IEnumerable<DataRow>, il che significa che tipo inferito sarà object.

Quando si specifica esplicitamente digitare foreach, si istruisce C# per aggiungere il cast a ogni chiamata, motivo per cui funziona.

5

Si verifica un cast implicito. Si noti inoltre che può essere generata una InvalidCastExceptionse il cast non è possibile.

1

Prova questa:

System.Data.DataTable dt = new System.Data.DataTable(); 

foreach (var row in dt.Rows.Cast<System.Data.DataRow>()) 
{ 

} 

Per utilizzare Rows.Cast è necessario utilizzare System.Linq.

Problemi correlati