如何解决未分配的' out'参数错误?

时间:2014-07-15 11:40:14

标签: c#

我正在尝试计算给定路径的所有子文件夹中的文件总数。我正在使用递归函数调用。可能是什么原因?

代码:

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 { }
}

2 个答案:

答案 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建议。