Warum kann ich nicht tun foreach (var Artikel in DataTable.Rows)?
Frage
Gibt es einen Grund, warum ich nicht die folgenden Möglichkeiten:
foreach (var Item in DataTable.Rows) {
, anstatt zu tun mit
foreach (DataRow Item in DataTable.Rows) {
Ich hätte gedacht, das möglich war, wie es auf anderen Datentypen ist. Zum Beispiel:
foreach (var Employee in Staff) { // string[] Staff etc...
Als ich die erste foreach-Schleife versuchen, erhalte ich die Fehler der CS0021:. Anwenden kann nicht Indizierung mit [], um einen Ausdruck des Typs ‚Objekts‘
Warum kann der Compiler herauszufinden, dass .Rows Gibt eine Sammlung von DataRows?
Lösung
Rows
effektiv kehrt IEnumerable
(DataRowCollection
), so dass der Compiler nur object
als Typ für var
auswählen können. Verwenden Rows.Cast<DataRow>
wenn Sie wollen var
verwenden.
Cast
ist definiert auf Enumerable , so müssen Sie Systems umfassen .Linq.
Andere Tipps
Brian ist absolut richtig, über den Grund dafür, aber es gibt einen einfacheren Weg, es zu vermeiden: Verwenden Sie DataTableExtensions.AsEnumerable () :
foreach (var row in DataTable.AsEnumerable())
{
...
}