2012-05-22 82 views
0

我有以下類:不能因訪問級別保護訪問變量

class Department 
{ 
private string departmentId; 
private string departmentName; 
private Hashtable doctors = new Hashtable();//Store doctors for 
               //each department 
public Hashtable Doctor 
{ 
get { return doctors; } 
} 
} 

我有保存部門對象的數組列表:

private static ArrayList deptList = new ArrayList(); 
public ArrayList Dept 
{ 
get { return deptList; } 
} 

我試圖讓所有的醫生(部門級Hashtable):

foreach (Department department in deptList) 
     { 
foreach (DictionaryEntry docDic in department.Doctor) 
     { 
foreach (Doctor doc in docDic.Value)//this is where I gets an error 
{ 

if (doc.ID.Equals(docID))//find the doctor specified 
{ 
} 
} 
} 
} 

但我無法編譯該程序。它給出了一個錯誤

foreach statement cannot operate on variables of type 'object' because 
'object' does not contain a public definition for 'GetEnumerator' 
+2

你應該使用這種泛型。請參閱[List ](http://msdn.microsoft.com/en-us/library/6sh2ey19.aspx)類。 – Bernard

回答

3

您正在嘗試通過字典條目的Value場迭代處理它,如果它是的Doctor個集合。 docDic的迭代應該已經做了你正在尋找的東西,只需要投下docDicDictionaryEntry的適當字段(可能是Value)。

Doctor doc = (Doctor) docDic.Value; 

更重要的是,你可以使用泛型,並在地圖上的聲明表示類型的字典鍵/值:

private Hashtable<string, Doctor> doctors = new Hashtable<string, Doctor>(); 

(爲Doctor場類似的變化)

然後你根本不需要上面的鑄件。

:我以爲你是從醫生的ID(鍵)映射到Doctor對象(值),該ID是一個字符串

+0

是的你r8。我正在迭代字典輸入,這是什麼probelm。我認爲你的第二種方法對我更合適。感謝您的幫助。 – Sas

1

前綴與公共訪問修飾符

public class Department 
{ 
private string departmentId; 
private string departmentName; 
private Hashtable doctors = new Hashtable();//Store doctors for 
              //each department 
public Hashtable Doctor 
{ 
get { return doctors; } 
    } 
} 
+0

問題是,正如「Attila」所說,字典條目。任何方式thanx爲您提供幫助 – Sas

相關問題