为什么类型推断(var)不能与ASP.NET GridView.Rows属性一起使用?

时间:2009-07-08 13:22:19

标签: asp.net visual-studio-2008

在此代码片段中

foreach (var row in grid.Rows) { }              

行的类型被推断为Object而不是GridViewRow。我必须明确声明要使用GridViewRow的类型:

foreach (GridViewRow row in grid.Rows) { }

GridView.Rows在集合“返回包含GridViewRowCollection中所有GridViewRow对象的枚举器”中返回GridViewRowCollection和GetEnumerator。如果我按索引从集合中访问单行

var row = grid.Rows[0];

正确推断出类型。为什么编译器不能在foreach声明中推断出行的类型?

编辑补充:有趣的回答,我没想到要找出明显的问题。 ListView.Items实现了IList<ListViewDataItem>,所以这看起来像是对我的疏忽。

2 个答案:

答案 0 :(得分:3)

Rows未实施IEnumerable<GridViewRow>

答案 1 :(得分:3)

因为GridViewRowCollection实现了非泛型IEnumerableICollection接口,这些接口不像这样强类型,但它的Item属性是强类型的,并返回一个GridViewRow。好一个微软!