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?

Foi útil?

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())
{
    ...
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top