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

别来无恙 提交于 2019-12-04 16:11:47

问题


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.


回答1:


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.




回答2:


An implicit cast happens. Also note that an InvalidCastException can be thrown if the cast isn't possible.




回答3:


table.Rows is a DataRowCollection which is IEnumberable ( and not IEnumerable<T>, T being DataRow), so it is not strongly typed to a DataRow, but a object i.e it is a collection of objects.

There is a DataTable extensions which you can use though - http://msdn.microsoft.com/en-us/library/system.data.datatableextensions.asenumerable.aspx

foreach (var row in table.AsEnumerable())
{

}



回答4:


Try this:

System.Data.DataTable dt = new System.Data.DataTable();

foreach (var row in dt.Rows.Cast<System.Data.DataRow>())
{

}

To use Rows.Cast you have to use System.Linq.



来源:https://stackoverflow.com/questions/12622307/use-of-c-sharp-var-for-implicit-typing-of-system-data-datarow

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!