您当然可以创建不同的迭代器以不同的方式遍历.例如,您可以:
public class Tree<T>
{
public IEnumerable<T> IterateDepthFirst()
{
// Iterate, using yield return
...
}
public IEnumerable<T> IterateBreadthFirst()
{
// Iterate, using yield return
...
}
}
Run Code Online (Sandbox Code Playgroud)
那是你问的那种事吗?
你也可以写:
public class Foo : IEnumerable<int>, IEnumerable<string>
Run Code Online (Sandbox Code Playgroud)
但这会引起很多混乱,并且foreach循环会选择任何一个非显式实现的GetEnumerator调用.
您还可以同时在同一个集合上多次迭代:
foreach (Person person1 in party)
{
foreach (Person person2 in party)
{
if (person1 != person2)
{
person1.SayHello(person2);
}
}
}
Run Code Online (Sandbox Code Playgroud)