Perché non posso fare foreach (var elemento in DataTable.Rows)?
Domanda
C'è un motivo per cui non posso fare il seguente:
foreach (var Item in DataTable.Rows) {
, piuttosto che dover fare
foreach (DataRow Item in DataTable.Rows) {
avrei pensato che questo fosse possibile, come è su altri tipi di dati. Ad esempio:
foreach (var Employee in Staff) { // string[] Staff etc...
Quando provo il primo ciclo foreach, ottengo l'errore CS0021:. Non è possibile applicare l'indicizzazione con [] per un'espressione di tipo 'oggetto'
Perché non è possibile il compilatore cifra che .Rows restituisce una collezione di DataRow?
Soluzione
Rows
ritorna effettivamente IEnumerable
(DataRowCollection
), in modo che il compilatore può scegliere solo object
come tipo per var
. Utilizzare Rows.Cast<DataRow>
se si desidera utilizzare var
.
Cast
è definita su Enumerable , quindi bisogna includere sistema .Linq.
Altri suggerimenti
Brian ha assolutamente ragione circa la ragione di questo, ma c'è un modo più semplice di evitarla: utilizzare DataTableExtensions.AsEnumerable () :
foreach (var row in DataTable.AsEnumerable())
{
...
}