在 .NET 5 中填充 Enumerable Inside Enumerable

Fill Enumerable Inside Enumerable in .NET 5

我有一个包含多个“面板页面”的“面板”模型。我想获取所有面板的列表,并用各自的“面板页面”填充每个面板。

这是我目前的代码(有效):

public IEnumerable<DynamicCustomPanel> GetCustomPanels()
{
    var customPanels = _customPanelService.GetDynamicCustomPanels();
    var dynamicCustomPanels = customPanels.ToList();

    foreach (var customPanel in dynamicCustomPanels.ToList())
    {
        var customPanelPages = _customPanelPageService.GetCustomPanelPages(customPanel.PanelGUID.ToString());
        customPanel.CustomPanelPages = customPanelPages;
    }

    return dynamicCustomPanels;
}

如何以最少的行数完成此操作?

这应该有效:

public IEnumerable<DynamicCustomPanel> GetCustomPanels()
{
    return _customPanelService.GetDynamicCustomPanels().Select(p => {
         p.CustomPanelPages = _customPanelPageService.GetCustomPanelPages(p.PanelGUID.ToString());
         return p;
     });
}

这在技术上是 3 个语句(两个 returns 和一个赋值)和一个块,尽管它有点滥用 Select() 方法。我可能会这样写:

public IEnumerable<DynamicCustomPanel> GetCustomPanels()
{
    foreach(var p in _customPanelService.GetDynamicCustomPanels())
    {
        p.CustomPanelPages = _customPanelPageService.GetCustomPanelPages(p.PanelGUID.ToString());
        yield return p;
    }
}

这是...也是 3 个语句(计数 foreach)和一个块,只是间距不同以便多使用一行文本。