好的,我在过去一小时左右的时间里已经认真地努力了解这一点。所以我想知道是否有人可以向我解释这一点。
我正在尝试在C#中创建一个可枚举的类。具体来说,我试图让它与foreach循环一起工作。我用一个简单的类进行测试,将字符输入构造函数。
EmployeeArray ArrayOfEmployees = new EmployeeArray('a','b','c');
foreach(char e in EmployeeArray) //Nope, can't do this!
{
Console.WriteLine(e);
}
//---Class Definition:---
class EmployeeArray
{
private char[] Employees;
public EmployeeChars(char[] e)
{
this.Employees = e;
}
//Now for my attempt at making it enumerable:
public IEnumerator GetEnumerator(int i)
{
return this.Employees[i];
}
}
答案 0 :(得分:0)
我建议你坚持使用一个简单的List<>
。这是一个通用的收集结构,可以为您完成所有繁重的工作。实际上,在完全理解系统的工作原理之前,制作自己的IEnumerables是没有意义的。
首先,将您的班级更改为代表单个项目:
public class Employee
{
public string Name {get;set;}
//add additional properties
}
然后创建一个List<Employee>
对象
List<Employee> employees = new List<Employee>();
employees.Add(new Employee() { Name = "John Smith" });
foreach(Employee emp in employees)
Console.WriteLine(emp.Name);
如果你真的想制作自己的IEnumerables,请查看msdn page on them,这是一个很好的例子。
答案 1 :(得分:0)
是这样的吗?顺便说一句,你不能使用Class作为集合,因为它是一种类型。您需要使用声明的变量来访问它。
// You cant use EmployeeArray, instead use ArrayOfEmployees
foreach(char e in **EmployeeArray**)
{
Console.WriteLine(e);
}
无论如何,这就是我做到的。
class Program
{
static void Main(string[] args)
{
Collection collect = new Collection(new string[]{"LOL1","LOL2"});
foreach (string col in collect)
{
Console.WriteLine(col + "\n");
}
Console.ReadKey();
}
}
public class Collection : IEnumerable
{
private Collection(){}
public string[] CollectedCollection { get; set; }
public Collection(string[] ArrayCollection)
{
CollectedCollection = ArrayCollection;
}
public IEnumerator GetEnumerator()
{
return this.CollectedCollection.GetEnumerator();
}
}