我正在尝试计算给定路径的所有子文件夹中的文件总数。我正在使用递归函数调用。可能是什么原因?
代码:
int iCount =0;
getFileCount(_dirPath, out iCount);
private void getFileCount(string _path, out int iCount )
{
try
{
// gives error :Use of unassigned out parameter 'iCount' RED Underline
iCount += Directory.GetFiles(_path).Length;
foreach (string _dirPath in Directory.GetDirectories(_path))
getFileCount(_dirPath, out iCount);
}
catch { }
}
答案 0 :(得分:11)
您希望ref
参数不是out
参数,因为您既接受了值又设置了新值。
int iCount = 0;
getFileCount(_dirPath, ref iCount);
private void getFileCount(string _path, ref int iCount )
{
try
{
// gives error :Use of unassigned out parameter 'iCount' RED Underline
iCount += Directory.GetFiles(_path).Length;
foreach (string _dirPath in Directory.GetDirectories(_path))
getFileCount(_dirPath, ref iCount);
}
catch { }
}
更好的是,根本不要使用参数。
private int getFileCount(string _path) {
int count = Directory.GetFiles(_path).Length;
foreach (string subdir in Directory.GetDirectories(_path))
count += getFileCount(subdir);
return count;
}
甚至更好,不要创建一个函数来执行框架已经构建的内容..
int count = Directory.GetFiles(path, "*", SearchOption.AllDirectories).Length
我们没有做得更好......当你需要的只是一个长度时,不要浪费空间和周期创建一个文件数组。相反,列举它们。
int count = Directory.EnumerateFiles(path, "*", SearchOption.AllDirectories).Count();
答案 1 :(得分:0)
作为out传递的参数需要在函数内初始化。由于iCount尚未初始化,因此该值未知,即使它是一个默认值为0的整数,它也不会从哪里开始。
我建议不要将out参数与递归函数耦合在一起。相反,可以使用常规的返回参数。微软本身通过一些静态分析规则to avoid out parameters if possible建议。