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?

È stato utile?

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())
{
    ...
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top