实现了IEnumurable就可以使用foreach了。
需要yield关键字来返回
最简单的迭代器
class Program
{
public static IEnumerable SimpleList()
{
yield return "String 1";
yield return "string 2";
yield return "string 3";
}
static void Main(string[] args)
{
foreach (string s in SimpleList())
{
Console.WriteLine(s);
}
}
}
复杂一点的例子:返回所有的偶数,实现Enumerable接口
class test:IEnumerable
{
int min;
int max;
public test(int i, int j)
{
min = i;
max = j;
}
public test():this(1,100)
{
}
public IEnumerator GetEnumerator()
{
for (int i = min; i < max; i++)
{
if (i % 2 == 0)
{
yield return i;
}
}
}
}
static void Main(string[] args)
{
test t = new test(1, 100);
foreach (int s in t)
{
Console.WriteLine(s);
}
}
结合DictionaryBase使用
public class Cards2:DictionaryBase
{
public void Add(string key, Card card)
{
Dictionary.Add(key, card);
}
public void Remove(string key)
{
Dictionary.Remove(key);
}
public Cards2()
{
}
public Card this[string key]
{
get
{
return (Card)Dictionary[key];
}
set
{
Dictionary[key] = value;
}
}
public new IEnumerator GetEnumerator()
{
foreach (object o in Dictionary.Values)
{
yield return (Card)o;
}
}
}
客户端使用:
Cards2 c = new Cards2();
c.Add("kk", new Card(Suit.Heart, Rank.Eight));
c.Add("mm", new Card(Suit.Heart, Rank.Double));
foreach (Card ca in c)
{
Console.WriteLine(ca);
}
结合CollectionBase使用
public class Cards:CollectionBase
{
public void Add(Card card)
{
List.Add(card);
}
public void Remove(Card card)
{
List.Remove(card);
}
public Cards()
{
}
public Card this[int cardIndex]
{
get { return (Card)List[cardIndex]; }
set { List[cardIndex] = value; }
}
public void CopyTo(Cards targetCards)
{
for (int i = 0; i < this.Count; i++)
{
targetCards[i] = this[i];
}
}
public bool Contains(Card card)
{
return InnerList.Contains(card);
}
public new IEnumerator GetEnumerator()
{
foreach (object o in List)
{
yield return (Card)o;
}
}
}
客户端使用:
Cards cs = new Cards();
cs.Add(new Card(Suit.Heart, Rank.Double));
foreach (Card c1 in cs)
{
Console.WriteLine(c1);
}
版权所属:Surance