并不是只有List<T>才有foreach/ForEach的权利,我们也同样很轻松的实现它
就像这样,
就像这样,
public class ForEachSupport {
static void Main(string[] args) {
Console.WriteLine("foreach & ForEach support");
EnumerableClass<Document> ec = new EnumerableClass<Document>();
ec.link(Document.create("hello"));
ec.link(Document.create("world"));
ec.link(Document.create("!!!"));
foreach(Document each in ec) {
Console.WriteLine(each.Title);
}
ec.ForEach(delegate(Document each){
Console.WriteLine(each.Title);
});
Console.ReadLine();
}
}
static void Main(string[] args) {
Console.WriteLine("foreach & ForEach support");
EnumerableClass<Document> ec = new EnumerableClass<Document>();
ec.link(Document.create("hello"));
ec.link(Document.create("world"));
ec.link(Document.create("!!!"));
foreach(Document each in ec) {
Console.WriteLine(each.Title);
}
ec.ForEach(delegate(Document each){
Console.WriteLine(each.Title);
});
Console.ReadLine();
}
}
实现也很简单,
public class EnumerableClass<T> : IEnumerable<T> {
private List<T> collection = new List<T>();
foreach (T each in collection) {
yield return each;
}
}
}
public void ForEach(Action<T> action) {
collection.ForEach(action);
}
public void link(T entity) {
collection.Add(entity);
}
}
private List<T> collection = new List<T>();
public IEnumerator<T> GetEnumerator() {
foreach (T each in collection) {
yield return each;
}
}
IEnumerator IEnumerable.GetEnumerator() {
}
public void ForEach(Action<T> action) {
collection.ForEach(action);
}
public void link(T entity) {
collection.Add(entity);
}
}
that's ok, all of it.