儿童对象的收益率回报率

Ech*_*lon 1 .net c# yield-return c#-4.0

我有一个项目列表('sections'),它有一个getter和一个setter.这些"部分"中的每一个都有一个"项目"列表.我想提供一个yield return属性来将'Items'属性公开为包含类的IEnumerable.我只是不能正确地得到语法.我在这里需要另一个循环还是会迭代太多次?

    public virtual IList<ISection> Sections{ get; set; }

    public virtual IEnumerable<IItem> Sections {
        get{
            foreach (var sect in Sections) {
                // will this iterate too many times if I add an additional loop?
                yield return sect.Items
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

Sim*_*mon 6

你是对的; 额外的循环应该做你想要的 - 虽然你不会从调用代码知道该项属于哪个部分.因此,如果这是一项要求,您可能需要重新考虑您的代码.

public virtual IEnumerable<IItem> Sections {
    get{
        foreach (var sect in Sections) {
            foreach (var item in sect.Items) {
                yield return item;
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)