有人能解释为什么嵌套的yield return会执行(C#yield return)吗?

时间:2013-06-04 15:32:13

标签: c#

using System.Reflection;

internal class TestReflection
{
    public static IEnumerable<object> ParseType(Type t)
    {
        foreach (MemberInfo mi in t.GetMembers())
        {
            yield return mi;
            foreach (object x in mi.GetCustomAttributes(true))
            {
                yield return x;
            }
        }
    }
}

所以我的问题是迭代器如何知道何时进入嵌套的foreach。我假设第一个yield return将始终执行,并且嵌套的yield return永远不会执行。但事实并非如此,这表明我对收益率回报声明并不十分了解。

有人可以解释一下吗?

由于 詹姆斯

1 个答案:

答案 0 :(得分:0)

如果只从枚举器中请求了一个元素,那么你就是对的,但是如果要求更多的元素,则必须执行内部foreach以生成更多的元素。