2013-04-03 101 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