计数器内部的递归函数

我需要计算在这个递归函数中删除的文件数。 由于它是递归的,我不能使用if语句,而C#不支持全局变量。 任何替代品?

 static void DirSearch(string path) { try { foreach (string dirPath in Directory.GetDirectories(path)) { foreach (string filePath in Directory.GetFiles(dirPath)) { string filename = Path.GetFileName(filePath); if (filename.Equals("desktop.txt")) { File.Delete(filePath); //count++ } Console.WriteLine(filePath); // print files } Console.WriteLine(dirPath); // print directories DirSearch(dirPath); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } } 

一种方法是传递一些东西让它计入。 我会使用ref执行此操作,例如:

 static void DirSearch(string path, ref int count) { try { foreach (string dirPath in Directory.GetDirectories(path)) { foreach (string filePath in Directory.GetFiles(dirPath)) { string filename = Path.GetFileName(filePath); if (filename.Equals("desktop.txt")) { File.Delete(filePath); count++ } Console.WriteLine(filePath); // print files } Console.WriteLine(dirPath); // print directories DirSearch(dirPath,ref count); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } } 

然后叫它:

 int count = 0; DirSearch(@"C:\SomePath",ref count); 

然后,您可以像在代码中注释掉的那样正常使用count

尝试递归count如下。 所以DirSearch返回已删除文件的count

 static int DirSearch(string path) { int count = 0; try { foreach (string dirPath in Directory.GetDirectories(path)) { foreach (string filePath in Directory.GetFiles(dirPath)) { string filename = Path.GetFileName(filePath); if (filename.Equals("desktop.txt")) { File.Delete(filePath); count++; } Console.WriteLine(filePath); // print files } Console.WriteLine(dirPath); // print directories count += DirSearch(dirPath); } } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } return count; } 

没有ref变量(所以你不需要传递正确初始化的东西):

 static int DirSearch(string path) { try { int count = 0; foreach (string dirPath in Directory.GetDirectories(path)) { foreach (string filePath in Directory.GetFiles(dirPath)) { string filename = Path.GetFileName(filePath); if (filename.Equals("desktop.txt")) { File.Delete(filePath); count++; } Console.WriteLine(filePath); // print files } Console.WriteLine(dirPath); // print directories count += DirSearch(dirPath); } return count; } catch (System.Exception excpt) { Console.WriteLine(excpt.Message); } } 

您是否也考虑过这里提出的非递归解决方案? https://stackoverflow.com/a/929418/2979680