在此代码片段中
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>
,所以这看起来像是对我的疏忽。
答案 0 :(得分:3)
Rows
未实施IEnumerable<GridViewRow>
。
答案 1 :(得分:3)
因为GridViewRowCollection
实现了非泛型IEnumerable
和ICollection
接口,这些接口不像这样强类型,但它的Item
属性是强类型的,并返回一个GridViewRow
。好一个微软!