Search code examples
c#datarowimplicit-typing

Use of C# var for implicit typing of System.Data.Datarow


foreach (var row in table.Rows)
{
     DoSomethingWith(row);
}

Assuming that I'm working with a standard System.Data.DataTable (which has a collection of System.Data.DataRow objects), the variable 'row' above resolves as an object type, not a System.Data.DataRow.

foreach (DataRow row in table.Rows)
{
     DoSomethingWith(row);
}

Works as I would expect. Is there a particular reason for this?

Thanks.


Solution

  • That's because Rows is DataRowCollection, which in turn is IEnumerable and not IEnumerable<DataRow>, which means that type inferred will be object.

    When you explicitly state type in foreach, you instruct c# to add cast to each call, which is why it works.