Por que não posso fazer o foreach (var item em datatable.rows)?
Pergunta
Existe uma razão pela qual não posso fazer o seguinte:
foreach (var Item in DataTable.Rows) {
Em vez de ter que fazer
foreach (DataRow Item in DataTable.Rows) {
Eu teria pensado que isso era possível, como se estivesse em outros tipos de dados. Por exemplo:
foreach (var Employee in Staff) { // string[] Staff etc...
Quando tento o primeiro loop de forach, recebo o erro CS0021: Não é possível aplicar a indexação com [] a uma expressão do tipo 'objeto'.
Por que o compilador não consegue descobrir que o .Rows retorna uma coleção de DataLarows?
Solução
Rows
retorna efetivamente IEnumerable
(DataRowCollection
), para que o compilador só possa escolher object
como o tipo para var
. Usar Rows.Cast<DataRow>
Se você quiser usar var
.
Cast
está definido em Enumerável, então você deve incluir System.Linq.
Outras dicas
Brian está absolutamente certo sobre o motivo disso, mas há uma maneira mais simples de evitá -lo: use DatatableExtensions.asenumerable ():
foreach (var row in DataTable.AsEnumerable())
{
...
}