using System;
using System.IO;namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args) {            //总行数
            int totalLineCount = 0;
            //目录
            string directory;            if (args.Length > 0) {
                directory = args[0];
            }
            else {
                directory = Directory.GetCurrentDirectory();
            }
            totalLineCount = DirectoryCountLines(directory);
            Console.WriteLine(totalLineCount);
            Console.ReadLine();
        }
        /// <summary>
        /// 计算目录数
        /// </summary>
        /// <param name="directory"></param>
        /// <returns></returns>
        static int DirectoryCountLines(string directory) {
            //这里的变量不是每次方法运行一次就会把次赋为0吗?为什么还可以累加上次的结果。
            int lineCount = 0;
            foreach (string file in Directory.GetFiles(directory, "*.txt")) {
                lineCount += CountLines(file);
            }            //递归子目录
            foreach (string subdirectory in Directory.GetDirectories(directory)) {
                lineCount += DirectoryCountLines(subdirectory);
            }            return lineCount;
        }        /// <summary>
        /// 计算行数
        /// </summary>
        /// <param name="file"></param>
        /// <returns></returns>
        private static int CountLines(string file) {
            string line;
            int lineCount = 0;
            FileStream stream = new FileStream(file, FileMode.Open);
            StreamReader reader = new StreamReader(stream);
            line = reader.ReadLine();            while (line != null) {
                if (line.Trim() != "") {
                    lineCount++;
                }
                line = reader.ReadLine();
            }
            reader.Close();
            return lineCount;
        }       
    }
}

解决方案 »

  1.   

    主要问题在于你的函数返回值也是int,再加上变量也是int累计,及自己跟踪看看吧
      

  2.   

    方法结束,方法中 的值类型都会被 立即释放销毁;引用类型会 被 .Net 内存回收器 间接销毁;函数值只会有 一个返回值被返回,且不会在函数内销毁;——至于,递归;这只是一个方法此次调用的问题:子方法不执行完,母方法的数据状态依然保持!!递归只是在于:子方法下可能有 孙方法,孙方法下面可能还有 重孙方法;——方法中数据的销毁,也是 从 重孙方法> 孙方法 > 子方法 > 母方法;——你的程序在递归过程中,母方法的 数据方然得保存着!————————————————————————————————————————————
    你的递归中:DirectoryCountLines   和   CountLines 
    都是自己调用自己,即,母方法 和 子方法 都是同一个方法体.....