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; }
}

各部門からすべての医師(部門クラスのハッシュテーブル)を取得しようとしています:

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'
4

2 に答える 2

3

のコレクションであるかのように扱って、辞書エントリのValueフィールドを反復処理しようとしていDoctorます。の反復docDicは、探していることをすでに実行しているはずです..の適切なフィールド(おそらくValue)をキャストする必要がありdocDic DictionaryEntryます.

Doctor doc = (Doctor) docDic.Value;

さらに良いことに、ジェネリックを使用して、マップの宣言で辞書のキー/値の型を示すことができます。

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

(フィールドの同様の変更Doctor)

次に、上記のキャストはまったく必要ありません。

:医師のID(キー)からDoctorオブジェクト(値)にマッピングしていて、IDが文字列であると仮定しました

于 2012-05-22T01:29:59.700 に答える
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; }
  }
 }
于 2012-05-22T01:33:38.283 に答える