我正在浏览一些股票以获取信息/权限等 我正在使用递归来遍历所有子股票。它工作正常但是,用户应该能够将子共享级别限制为特定数字,这是应用程序中的参数吗?
private static INodeCollection NodesLookUp(string path)
{
var shareCollectionNode = new ShareCollection(path);
// Do somethings
foreach (var directory in Directory.GetDirectories(shareCollectionNode.FullPath))
{
shareCollectionNode.AddNode(NodesLookUp(directory));
}
return shareCollectionNode;
}
这段代码会一直到最低级别,我怎么能在特定级别停止它?例如,只获得所有股票直到2个级别?
感谢。
答案 0 :(得分:4)
如何传递level
变量并在每次递归调用后增加它?这将允许您控制当前递归级别或剩余级别。不要忘记检查是否为空。
private const int maxDepth = 2;
private static INodeCollection NodesLookUp(string path, int level)
{
if(level >= maxDepth)
return null;
var shareCollectionNode = new ShareCollection(path);
// Do somethings
foreach (var directory in Directory.GetDirectories(shareCollectionNode.FullPath))
{
var nodes = NodesLookUp(directory, level + 1);
if(nodes != null)
shareCollectionNode.AddNode(nodes);
}
return shareCollectionNode;
}
初始级别可以为零索引,如
NodesLookUp("some path", 0);
答案 1 :(得分:3)
不是使用全局变量来控制级别,而是传递maxLevel
并在每次递归调用时递减。
private static INodeCollection NodesLookUp(string path, int maxLevel)
{
var shareCollectionNode = new ShareCollection(path);
if (maxLevel > 0)
{
foreach (var directory in Directory.GetDirectories(shareCollectionNode.FullPath))
{
shareCollectionNode.AddNode(NodesLookup(directory, maxLevel-1));
}
}
return shareCollectionNode;
}
答案 2 :(得分:0)
这个怎么样:
private static INodeCollection NodesLookUp(string path, Int32 currentLevel, Int32 maxLevel)
{
if (currentLevel > maxLevel)
{
return null;
}
var shareCollectionNode = new ShareCollection(path);
// Do somethings
foreach (var directory in Directory.GetDirectories(shareCollectionNode.FullPath))
{
INodeCollection foundCollection = NodesLookUp(directory, currentLevel + 1, maxLevel)
if(foundCollection != null)
{
shareCollectionNode.AddNode();
}
}
return shareCollectionNode;
}
在这种情况下,您不必担心每次运行方法时都会修改私有字段的状态。而且,只要代码的其余部分是线程安全的,它就是线程安全的。