我很困惑为什么如果listControl
是ListControl对象(例如DropDownList),则此代码将无法编译:
foreach (var item in listControl.Items) {
item.Value = string.empty;
}
编译器认为item
是类型object
。如果我替换var
为ListItem
,它会工作,显式声明变量。该Items
属性是ListItemCollection
实现的IEnumerable
。编译器难道不应该知道集合中的对象是类型ListItem
吗?
正如您所指出的那样,这是一个奇怪的行为,因为它ListItemCollection
是的集合ListItem
。这似乎与以下事实有关:该事实是在C#支持泛型之前实现的。因此,它实现的IEnumerable
不是IEnumerable<ListItem>
,而是无法确定正确的类型。
我建议这样重写循环:
foreach (ListItem item in listControl.Items) {
item.Value = string.empty;
}
查看此问题以获取其他信息。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句