我寫了一個CustomerCollection類,它實現了IEnumerable和IEnumerator接口。現在我希望CustomerCollection類對象可以通過Where()和Find()函數進行搜索,並且還希望從CustomerCollection類中獲取類型爲Customer的List對象。請幫忙。另外,接口的實現是正確的。IEnumerable集合到列表
public class Customer
{
private int _CustomerID;
private string _CustomerName;
public Customer(int customerID)
{
this._CustomerID = customerID;
}
public int CustomerID
{
get
{
return _CustomerID;
}
set
{
_CustomerID = value;
}
}
public string CustomerName
{
get
{
return _CustomerName;
}
set
{
_CustomerName = value;
}
}
}
public class CustomerController
{
public ArrayList PopulateCustomer()
{
ArrayList Temp = new ArrayList();
Customer _Customer1 = new Customer(1);
Customer _Customer2 = new Customer(2);
_Customer1.CustomerName = "Soham Dasgupta";
_Customer2.CustomerName = "Bappa Sarkar";
Temp.Add(_Customer1);
Temp.Add(_Customer2);
return Temp;
}
}
public class CustomerCollection : IEnumerable, IEnumerator
{
ArrayList Customers = null;
IEnumerator CustomerEnum = null;
public CustomerCollection()
{
this.Customers = new CustomerController().PopulateCustomer();
this.CustomerEnum = Customers.GetEnumerator();
}
public void SortByName()
{
this.Reset();
}
public void SortByID()
{
this.Reset();
}
public IEnumerator GetEnumerator()
{
return (IEnumerator)this;
}
IEnumerator IEnumerable.GetEnumerator()
{
return (IEnumerator)this;
}
public void Reset()
{
CustomerEnum.Reset();
}
public bool MoveNext()
{
return CustomerEnum.MoveNext();
}
public object Current
{
get
{
return (Customer)CustomerEnum.Current;
}
}
}
你的集合類不應該實現IEnumerable **和**的IEnumerator(除了極少數情況下,只有永遠的零元素)。統計員是有狀態的,枚舉數不是。 GetEnumerator()被多次調用時,您的代碼將無法工作。 – 2010-08-24 14:08:52
你是指'IEnumerable'/'列表'或者確切地說'IEnumerable' /'List'? –
abatishchev
2010-08-24 14:14:10
爲什麼不只是使用列表,你可以免費獲得所有的Where和Linq函數...... –
chugh97
2010-08-24 14:34:50