Question

Y at-il une raison pour laquelle je ne peux pas faire ce qui suit:

foreach (var Item in DataTable.Rows) {

plutôt que d'avoir à faire

foreach (DataRow Item in DataTable.Rows) {

J'aurais pensé que cela était possible, comme il est sur d'autres types de données. Par exemple:

foreach (var Employee in Staff) { // string[] Staff etc...

Lorsque je tente la première boucle foreach, je reçois l'erreur CS0021:. Ne peut pas appliquer l'indexation avec [] à une expression de type 'objet'

Pourquoi ne peut pas la figure du compilateur que .Rows retourne une collection de DataRows?

Était-ce utile?

La solution

Rows retourne efficacement IEnumerable (DataRowCollection), de sorte que le compilateur ne peut choisir object que le type de var. Utilisez Rows.Cast<DataRow> si vous souhaitez utiliser var.

Cast est définie sur Enumerable, donc vous devez inclure système .Linq.

Autres conseils

Brian est tout à fait raison sur la raison de cela, mais il y a un moyen plus simple de l'éviter: utiliser DataTableExtensions.AsEnumerable () :

foreach (var row in DataTable.AsEnumerable())
{
    ...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top