3

我正在浏览一些共享以获取信息/权限..等我正在使用递归遍历所有子共享。它工作正常但是,用户应该能够将子共享级别限制为特定数量,这是应用程序中的一个参数?

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 个级别的所有份额?

谢谢。

4

3 回答 3

5

在每个级别的递归调用之后传递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);
于 2013-03-27T14:59:24.810 回答
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;
}
于 2013-03-27T15:16:18.247 回答
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;
    }

在这种情况下,您不必担心每次方法运行时都会修改私有字段的状态。而且,就您的其余代码是线程安全的而言,它将是线程安全的。

于 2013-03-27T15:14:15.377 回答