2010-08-19 42 views
2

我想知道如果我想跟踪递归方法中的文件夹数量,我该如何做到这一点,因此计数器不会每次都在循环中重置下面的代码?在递归调用中跟踪项目编号C#

// how to keep track of the number of sourceFolder that has been processed? 
public void recursiveMethod(SPFolder sourceFolder, SPFolder destinationFolder) 
{ 
    int totalNumberOfFiles = sourceFolder.SubFolders.Count; 

    foreach (SPFolder sourceSubFolder in sourceFolder.SubFolders) 
    { 
     if (true) 
     { 
      SPFolder destSubFolder = null; 
      if (true) 
      { 
       destSubFolder = doSomething(); 
      } 
      else 
      { 
       destSubFolder = doSomethingElse(); 
      } 
     } 
     recursiveMethod(sourceSubFolder, destSubFolder); 
    } 
} 

这里的目标是要显示类似 “处理文件夹/100” 给用户。我无法保持文件夹计数而没有重新设置。假设:文件夹本身没有唯一的ID。

谢谢。

回答

2

你可以只是将count变量作为参数传递给方法吗?

+0

当然,然后让该方法返回计数。如果这不方便,可以通过引用传递计数。 – 2010-08-19 07:48:09

+0

没错。您可以将该参数设为可选,默认值为0并完成该操作。 – ragerory 2015-12-03 03:47:25

3

此代码允许您显示迄今为止处理了多少个文件夹。然而,它并没有得到文件夹的总数是棘手的:你不知道,直到整个递归完成:

public void recursiveMethod(SPFolder sourceFolder, SPFolder destinationFolder) 
{ 
    int folderIndex = 1; 

    recursiveMethod(sourceFolder, destinationFolder, ref folderIndex); 
} 

public void recursiveMethod(SPFolder sourceFolder, SPFolder destinationFolder, ref folderIndex) 
{ 
    int totalNumberOfFiles = sourceFolder.SubFolders.Count; 

    foreach (SPFolder sourceSubFolder in sourceFolder.SubFolders) 
    { 
     // Display processed folder 
     Console.WriteLine("Processing folder " + folderIndex); 

     if (true) 
     { 
      SPFolder destSubFolder = null; 

      if (true) 
      { 
       destSubFolder = doSomething(); 
      } 
      else 
      { 
       destSubFolder = doSomethingElse(); 
      } 
     } 

     // Increase processed folder index 
     folderIndex++; 

     // Recursive call 
     recursiveMethod(sourceSubFolder, destSubFolder, ref folderIndex); 
    } 
} 
+0

我不知道这比传入当前计数并返回可能递增的计数还好。 – 2010-08-19 14:48:57