1

我只是偶然发现了这个问题,我很好奇为什么会这样:如果我访问Application.OpenFormsvia index 集合中的表单,编译器会告诉我它是一个表单:

var form = Application.OpenForms[0];
form.Name = "A new name";

这工作得很好。但如果我这样访问它:

foreach (var form in Application.OpenForms)
{
  form.Name = "A new name";
}

编译器告诉我form是一个对象。为什么会这样?

4

2 回答 2

2

您在 foreach 循环中获取对象,因为FormCollection类实现了非通用 IEnumerable接口(继承自 ReadOnlyCollectionBase)。但它有返回的索引器Form

只需将对象强制转换Form为循环输入:

foreach (Form form in Application.OpenForms)
{
   form.Name = "A new name";
}
于 2013-04-03T08:16:17.723 回答
0

如果您检查Application.OpenForms属性,它的值由“FormCollection包含此应用程序拥有的所有当前打开的表单的 A”定义。继承FormCollectionReadOnlyCollectionBase,然后集合中的每个实例都被定义为一个对象。所以可以将它转换为 aForm来使用它,或者只是Formforeach循环中使用而不是使用var.

于 2013-04-03T08:26:47.067 回答