2015-08-28 58 views
3

这里是我的阶级结构:如何在列表类型的类上使用foreach循环?

public class Emp_Details : IEnumerable 
{ 
    public List<Employee> lstEmployee{ get; set; } 
} 
public class Employee 
{  public string Name{ get; set; } 
    public int Age{ get; set; } 
    public string Address{ get; set; } 
} 

这里就是我想要做:

Emp_Details obj = new Emp_Details(); 
obj.lstEmployee = new List<Employee>(); 
Employee objEmp= new Employee(); 
objEmp.Name="ABC"; 
objEmp.Age=21; 
objEmp.Address="XYZ"; 
obj.lstEmployee.Add(objEmp); 
foreach(var emp in obj) 
{ 
       //some code 
} 

我想在List<Employee> lstEmployee 使用的foreach但我正在逐渐

Emp_Details不实现接口成员'System.Collections.IEnumerable.GetEnumerator()'

任何人都可以帮我吗?

+9

删除':IEnumerable' - 你没有实现它。 –

+1

您还需要确保'lstEmployee'在您使用它之前被初始化。您可能希望将一个构造函数添加到'Emp_Details'并在那里执行。即使将其设置为空列表也比没有好。 –

回答

4

问题是你在你的语法,你Emp_Details类实现IEnumerable声明了,但你实际上并没有实现它。你可以简单地删除该声明,并直接枚举基础列表正如其他人的建议,或者如果你真的想Emp_Details自己是枚举的,你必须实现IEnumerableGetEnumerator方法(简单地返回内部列表的枚举):

public class Emp_Details : IEnumerable<Employee> 
{ 
    public List<Employee> lstEmployee { get; set; } 

    public Emp_Details() 
    { 
     this.lstEmployee = new List<Employee>(); 
    } 

    public IEnumerator<Employee> GetEnumerator() 
    { 
     return lstEmployee.GetEnumerator(); 
    } 

    System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator() 
    { 
     return GetEnumerator(); 
    } 
} 
public class Employee 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Address { get; set; } 
} 

为了增加类型安全性,明确实施通用接口IEnumerable<T>和非通用IEnumerable版本更好。现在,您可以遍历的Emp_Details一个实例:

Emp_Details empDetails = new Emp_Details(); 
// add employees to the inner list 
empDetails.lstEmployee.Add(new Employee(...)); 
empDetails.lstEmployee.Add(new Employee(...)); 
empDetails.lstEmployee.Add(new Employee(...)); 

// iterate over empDetails using foreach 
foreach(Employee emp in empDetails) 
{ 
    // 
} 

此外,由于你的Emp_Details类似乎是一个集合,它是有道理的实现集合接口也和暴露AddRemove等方法,而不是暴露直接在底层lstEmployee

5

只需从Emp_Details的声明卸下底座接口:

public class Emp_Details 
{ 
    public List<Employee> lstEmployee{ get; set; } 
} 
+0

第一次只使用它。但它给了我例外,它没有包含'GetEnumerator'的公共定义 –

+0

什么是确切的异常文本(或错误消息)? – Dmitry

0

您必须实现Ienumerable的GetEnumerator方法!

public class Emp_Details : IEnumerable 
    { 
     public List<Employee> lstEmployee { get; set; } 


     public IEnumerator GetEnumerator() 
     { 
      throw new NotImplementedException("You must implement this"); 
     } 
    }