実行時に設定できる列挙子を使用してコレクションを定義したいと考えています。
列挙子を定義しました:
public class JuniorEmployeeEnumerator : IEnumerable<Employee> {
List<Employee> list = new List<Employee>();
public JuniorEmployeeEnumerator(List<Employee> emplist) {
list = emplist;
}
public IEnumerator<Employee> GetEnumerator() {
for (int i = 0; i < list.Count; i++) {
if (list[i].Age < 50) {
yield return list[i];
}
}
}
IEnumerator IEnumerable.GetEnumerator() {
return (GetEnumerator());
}
}
コレクションは列挙子を受け入れます。
public class EmployeeCollection : IEnumerable<Employee> {
public List<Employee> Employees { get; set; }
public IEnumerable<Employee> EnumeratorType { get; set; }
public EmployeeCollection() {
Employees = new List<Employee>();
}
public IEnumerator<Employee> GetEnumerator() {
return EnumeratorType.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator() {
return (GetEnumerator());
}
}
したがって、使用法は次のようになります。
static void Main(string[] args) {
EmployeeCollection empcoll = new EmployeeCollection();
empcoll.Employees.Add(new Employee("Fatima", 57));
empcoll.Employees.Add(new Employee("Evangeline", 52));
empcoll.Employees.Add(new Employee("Damien", 49));
empcoll.Employees.Add(new Employee("Cameroon", 55));
empcoll.Employees.Add(new Employee("Babu", 24));
Console.Write("Senior Employees \n");
empcoll.EnumeratorType = new JuniorEmployeeEnumerator(empcoll.Employees);
foreach (Employee anEmp in empcoll.GetEnumerator()) {
Console.Write(" " + anEmp.Name + " " + anEmp.Age + "\n");
}
Console.ReadKey();
}
しかし、私はこのコンパイルエラーが発生します:
foreach ステートメントは、'System.Collections.Generic.IEnumerator' に 'GetEnumerator' のパブリック定義が含まれていないため、'System.Collections.Generic.IEnumerator' 型の変数を操作できません。
どうすれば修正できますか?