2013-04-03 72 views
1

我只是st over了这个问题,我很好奇为什么它是这样: 如果我通过索引访问Application.OpenForms集合中的表单,编译器告诉我它是一个表单:通过foreach与索引访问Application.OpenForms

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

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

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

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

回答

2

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

环路可简单地把对象Form类型:

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

好的,谢谢。所以没有任何问题“铸造”它总是“形式”权利? – derape

+0

@derape正好,简单地将对象形成像这样的'foreach(Application.OpenForms中的表单窗体)' –

0

如果您要检查Application.OpenForms物业,其价值由“A包含所有此应用程序拥有当前打开的形式FormCollection”定义。其中FormCollectionReadOnlyCollectionBase继承,则集合中的每个实例都被定义为一个对象。因此,可以将其投射到Form以使用它,或者仅在foreach循环中使用Form,而不是使用var