none
为什么dispose了不能重新声明同名变量 RRS feed

  • 问题

  • 我写了个分割文件的程序,在写文件代码时遇到一个问题:

    有问题的代码

     if (intFileCoped > intSizeSet)  \\当写入文件大小超过设定值时,新建个文件
                        {
                            i = i + 1;
                            string strFileMudiNew = strFileMudi.Replace(".", "-" + i.ToString() + ".");

                            fwriter .dispose();   //fwriter在之前定义过
                            FileStream fwriter = new FileStream(strFileMudiNew, FileMode.Create);
                            intFileCoped = osize;
                        }

    修改后的代码

     if (intFileCoped > intSizeSet)  \\当写入文件大小超过设定值时,新建个文件
                        {
                            i = i + 1;
                            string strFileMudiNew = strFileMudi.Replace(".", "-" + i.ToString() + ".");
                           FileStream fwriterF = new FileStream(strFileMudiNew, FileMode.Create);

                         fwriter = fwriterF;
                            intFileCoped = osize;
                        }

     

    为什么我dispose了重新构建不行?

    2010年5月31日 3:53

答案

  • 你好!

         这样做编译的时候就会出现问题了!你的fwriter如果是成员变量,那FileStream fwriter = new FileStream(strFileMudiNew, FileMode.Create);这个声明会隐藏成员变量的声明,也就是把fwriter识别成局部变量,而fwriter .dispose();在声明局部变量之前调用,肯定无法通过编译!这些都是发生在编译时,代码并没有运行,谈不上销毁不销毁的问题!


    周雪峰
    • 已标记为答案 ybgjj2009 2010年6月1日 3:21
    2010年5月31日 4:41
    版主

全部回复

  • 你好!

         这样做编译的时候就会出现问题了!你的fwriter如果是成员变量,那FileStream fwriter = new FileStream(strFileMudiNew, FileMode.Create);这个声明会隐藏成员变量的声明,也就是把fwriter识别成局部变量,而fwriter .dispose();在声明局部变量之前调用,肯定无法通过编译!这些都是发生在编译时,代码并没有运行,谈不上销毁不销毁的问题!


    周雪峰
    • 已标记为答案 ybgjj2009 2010年6月1日 3:21
    2010年5月31日 4:41
    版主
  • 谢谢雪峰

    2010年6月1日 3:30
  • 不客气啊!
    周雪峰
    2010年6月1日 4:11
    版主