我有一种递归方法,可以构建资源及其相关资源的树状结构。递归方法检查的最后一次迭代
对于我使用的每个资源,我将它添加到一个类成员列表中,我会在每次迭代中检查以确保我们不会无限循环地依赖于相互依赖的资源。
每次我第一次调用这个递归方法时,我需要清除类成员列表。
目前我有一个独立的方法来做到这一点,我可以调用递归方法调用。
我想摆脱这种方法调用,并自动重置列表每次。
此刻,我能看到两个选项来解决这个问题:
- 测试调用的方法是否相同,目前 执行的方法,如果没有,重置列表
- 摆脱递归和队列项目,而不是队列中的排队队列和队列队列。在方法调用结束时,我可以重置列表。
你将如何去解决这个问题?你会采取什么方法?
这里是我的代码目前的样子:
public class GetAllRelatedResourcesByParentGuidQuery : IGetAllRelatedResourcesByParentGuidQuery
{
private readonly IList<Guid> _itemsCheckedForRelations = new List<Guid>();
public IEnumerable<IDependency> Invoke(Guid parentCiId,
IResoucesByIdQuery getResources)
{
if (!_itemsCheckedForRelations.Contains(parentCiId))
{
var relatedResources = getResources.Invoke(parentCiId);
_itemsCheckedForRelations.Add(parentCiId);
if (relatedResources.Count() > 0)
{
foreach (var relatedResource in relatedResources)
{
relatedResource.Resource.DependentResources = Invoke(
relatedResource.Resource.Id,
getResources);
yield return relatedResource;
}
}
}
}
public void ResetCheckedItemsCollection()
{
_itemsCheckedForRelations.Clear();
}
}
如果您粘贴部分代码可能有助于理解您的推理。 在你的场景中,我认为最好有2个重载方法:一个用于第一个调用和第二个,它是递归的,由第一个调用。 –
有些代码会有帮助。 AFAIK,如果没有返回语句和对象作为参数传递,递归是无效的,在这个参数上执行动作,并且这个对象必须随着每次递归而改变。 – hungryMind
谢谢你们。我已经在上面包含了我的代码。 –