I'm trying to setup a recursive logic using Yield. Here is my scenario: I have a collection of NodeviewModel items, and each NodeviewModel item can have multiple children of type NodeViewModel item. The depth of the graph could be 'n'. Basically, I'm getting NodeviewModel item and converting into a different form.
Here is the code:
public class CompositeContentBuilder
{
private readonly IContentFactory _contentFactory;
public CompositeContentBuilder(IContentFactory contentFactory)
{
_contentFactory = contentFactory;
}
public IEnumerable<IContentViewModel> BuildFrom(IEnumerable<INodeViewModel> nodes)
{
if (nodes.Count() == 1)
yield return BuildFrom(nodes.First());
foreach (var nodeViewModel in nodes)
{
yield return BuildFrom(nodeViewModel);
foreach (var viewModel in nodeViewModel.Children)
{
yield return BuildFrom(viewModel);
}
//How do I return children.children...and so on?
}
}
private IContentViewModel BuildFrom(INodeViewModel node)
{
var content = _contentFactory.Create(node);
content.Initialise();
return content;
}
}
How will I convert children.children and so on? Could you please help?