using System;
using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace Iterator
{ public class Item { string name; double price; public Item(string n, double p) { this.name = n; this.price = p; }public string getName()
{ return name; }public double getPrice()
{ return price; }}
//使用ArrayList
public class BookItems { ArrayList books;public BookItems() {
books = new ArrayList();
add("JAVA大全", 199);
add("InfoPath大全", 29); add("Asp大全", 33);}
public void add(string n, double p)
{ Item i = new Item(n, p);books.Add(i);
}public ArrayList getItems()
{ return books; } } //使用范型 public class CDItems { List<Item> CDs;public CDItems()
{CDs = new List<Item>();
add("郑秀文专辑", 69);
add("郑伊健专辑", 59); add("刘德华专辑", 53); }public List<Item> Items
{ get { return CDs; } set {}
}public void add(string n, double p)
{ Item i = new Item(n, p);CDs.Add(i);
}public List<Item> getItems()
{ return CDs; }}
//使用数组
public class MobileItems { Item[] Mobiles; static int MAX_ITEMS = 3; int index = 0;public MobileItems()
{Mobiles = new Item[MAX_ITEMS];
add("诺基亚", 3369);
add("三星", 2259); add("LG", 1153); }public void add(string n, double p)
{ Item i = new Item(n, p); if (index < MAX_ITEMS) { Mobiles[index] = i; index++; } }public Item[] getItems()
{ return Mobiles; } //#region IEnumerable 成员//IEnumerator IEnumerable.GetEnumerator()
//{ // return new ArrayIEnumerator(Mobiles); //}//#endregion
} public class ArrayIEnumerator : IEnumerator { Item[] items; int index = 0;public ArrayIEnumerator(Item[] i)
{ this.items = i; }#region IEnumerator 成员
object IEnumerator.Current
{ get { return items[index]; } }bool IEnumerator.MoveNext()
{ if (index > items.Length || items[index] == null) { return false; } else { return true; } }void IEnumerator.Reset()
{ index = 0; }#endregion
} }
using System;
using System.Collections.Generic;using System.Linq;using System.Text;using System.Collections;namespace Iterator
{ public class Point { public int X; public int Y;public Point(int i, int j)
{ this.X = i; this.Y = j; } }class Program
{ static void Main(string[] args) {BookItems b = new BookItems();
CDItems c = new CDItems(); MobileItems m = new MobileItems();//C#自动实现了迭代器
foreach (Item i in b.getItems())
{ Console.WriteLine(i.getName() + " " + i.getPrice()); }foreach (Item i in c.Items)
{ Console.WriteLine(i.getName() + " " + i.getPrice()); }foreach (Item i in m.getItems())
{ Console.WriteLine(i.getName() + " " + i.getPrice()); } //以下是范型委托的例子// To find the first Point structure for which X times Y
// is greater than 100000, pass the array and a delegate // that represents the ProductGT10 method to the Shared // Find method of the Array class. Point[] points = { new Point(100, 200), new Point(150, 250), new Point(250, 375), new Point(275, 395), new Point(295, 450) };Point[] all = Array.FindAll(points, ProductGT10);
List<Point> all1 = new List<Point>(); all1.Add(new Point(100, 200)); all1.Add(new Point(150, 250)); all1.Add(new Point(250, 375)); all1.Add(new Point(275, 395)); all1.Add(new Point(295, 450));all1 = all1.FindAll(ProductGT10);
Console.WriteLine("以下是范型委托的例子FindAll");
foreach (Point p in all)
{ Console.WriteLine(p.X.ToString() + " " + p.Y.ToString()); } System.Console.ReadLine();}
private static bool ProductGT10(Point p)
{ if (p.X * p.Y > 100000) { return true; } else { return false; } }}
}