我刚刚解决了这个问题,我很好奇为什么会这样:
如果我通过索引访问Application.OpenForms
集合中的表单,编译器会告诉我它是一个表单:
var form = Application.OpenForms[0];
form.Name = "A new name";
这完全没问题。但如果我这样访问它:
foreach (var form in Application.OpenForms)
{
form.Name = "A new name";
}
编译器告诉我form
是一个对象。为什么会这样?
答案 0 :(得分:2)
您在foreach循环中获取对象,因为FormCollection
类实现了非泛型 IEnumerable接口(继承自ReadOnlyCollectionBase)。但它有索引器,返回Form
。
简单地将对象转换为Form
循环类型:
foreach (Form form in Application.OpenForms)
{
form.Name = "A new name";
}
答案 1 :(得分:0)
如果您要检查Application.OpenForms
属性,则其值由“A FormCollection
定义,其中包含此应用程序拥有的所有当前打开的表单”。哪个FormCollection
是从ReadOnlyCollectionBase
继承的,然后集合中的每个实例都被定义为一个对象。因此,可以将其转换为Form
以使用它,或者只使用Form
循环中的foreach
而不是使用var
。