How to solve unassigned 'out' parameter error?
本问题已经有最佳答案,请猛点这里访问。
我正在尝试计数给定路径的所有子文件夹中的文件总数。我正在使用递归函数调用。原因可能是什么?
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 { } } |
您需要一个
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | 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 { } } |
更好的是,根本不要使用out参数。
1 2 3 4 5 6 7 | private int getFileCount(string _path) { int count = Directory.GetFiles(_path).Length; foreach (string subdir in Directory.GetDirectories(_path)) count += getFileCount(subdir); return count; } |
甚至更好的是,不要创建一个函数来做框架已经内置的事情。
1 | int count = Directory.GetFiles(path,"*", SearchOption.AllDirectories).Length |
而且我们还没有变得更好…当您只需要一个长度时,不要浪费空间和周期来创建一个文件数组。把它们列举出来。
1 | int count = Directory.EnumerateFiles(path,"*", SearchOption.AllDirectories).Count(); |
传递为out的参数需要在函数内初始化。由于ICount尚未初始化,但该值未知,并且它不以何处开始,即使它是一个默认值为0的整数。
我建议不要将out参数与递归函数耦合在一起。相反,可以使用常规的返回参数。微软本身通过一些静态分析规则来建议尽可能避免使用out参数。