Skip to main content
 首页 » 编程设计

c#之递归调用重载方法

2024年06月03日7lori

我正在尝试使用以下代码递归显示 tmp 文件的数量。但是当我出于递归目的调用 DirSearch() 时;我得到一个错误,没有重载方法可以接受 1 个参数。

namespace TestForm 
{ 
    public partial class TEST : Form 
    { 
        public TEST() 
        { 
            InitializeComponent(); 
        } 
 
 
        private void button1_Click(object sender, EventArgs e) 
        { 
          TEST search = new TEST(); 
            search.DirSearch(); 
            int result = search.DirSearch(); 
            label1.Text = result.ToString(); 
 
        } 
 
        public  int DirSearch() 
        { 
 
            int count = 0; 
            var sDir = Directory.GetFiles(@"C:\", "*.tmp", SearchOption.AllDirectories); 
 
            try 
            { 
 
                foreach (string d in sDir) 
                { 
                    foreach (string f in Directory.GetFiles(d, "*.tmp")) 
                    { 
                        string extension = Path.GetExtension(f); 
                        if (extension != null && (extension.Equals(".tmp"))) 
                        { 
                            count++; 
                            return count; 
                        } 
                    } 
                    DirSearch(d); 
 
                } 
            } 
            catch (UnauthorizedAccessException) 
            { 
 
            }              
 
        }          
 
    }         
} 

请您参考如下方法:

我认为您对您要实现的递归算法有点误解。

要使递归方法起作用,它需要对输入进行操作,然后对派生的输入再次(递归地)调用自身。

您的 DirSearch() 方法不接受任何输入,因此它会一遍又一遍地计算相同的东西。您需要将根路径传递给递归算法将开始的方法,因此签名应更改为:

public  int DirSearch(string rootPath) 

然后改变:

var sDir = Directory.GetFiles(rootPath, "*.tmp", SearchOption.AllDirectories); 

现在,在 DirSearch 方法的主体中,您必须枚举提供的路径中的所有目录,然后使用这些目录的完整路径调用 DirSeach 方法:

DirSearch(d)