访问应用程序.OpenForms通过foreach vs. index
本文关键字:vs index foreach 通过 应用程序 OpenForms 访问 | 更新日期: 2023-09-27 18:07:22
我刚刚遇到这个问题,我很好奇为什么会这样:如果我通过索引访问Application.OpenForms
集合中的表单,编译器告诉我它是一个表单:
var form = Application.OpenForms[0];
form.Name = "A new name";
这工作得很好。但是如果我像这样访问它:
foreach (var form in Application.OpenForms)
{
form.Name = "A new name";
}
编译器告诉我form
是一个对象。为什么会这样?
你在foreach循环中得到对象,因为FormCollection
类实现了非泛型 IEnumerable接口(继承自ReadOnlyCollectionBase)。但它有索引器返回Form
。
在循环中将对象强制转换为Form
类型:
foreach (Form form in Application.OpenForms)
{
form.Name = "A new name";
}
如果你检查Application.OpenForms
属性,它的值是由"一个FormCollection
包含所有当前打开的窗体属于这个应用程序"定义的。如果FormCollection
继承自ReadOnlyCollectionBase
,那么集合中的每个实例都被定义为对象。因此,可以将其强制转换为Form
来使用它,或者在foreach
循环中使用Form
,而不是使用var
。