none
同样是"*.ToString"鼠标悬停后,出现的解释会不一样呢 RRS feed

  • 问题

  • <pre lang="x-c#">第一个???行鼠标悬浮会出现"返回system.string的此实例,不执行实际转换"
    第二个?????行鼠标悬浮后会出现"将此实例的值转换为system string"
    请问为何同样是"*.ToString"但解释会不一样呢?谢谢答复
    是我注解的,有不对的地方请指点.
    
    string str = "插入字符串";               //定义字符串变量str并赋值
    private void button3_Click(object sender, EventArgs e) //插入字符串
    {
      StringBuilder builder = new StringBuilder();    //构造一个空StringBuilder,对象名builder
      int lenChar=0;                   //定义int类型的变量lenChar赋值0
      for (int i =0; i <richTextBox1.Lines.Length; i++)  //lines包括换行符\n行,
                                //Length是以\n分隔的块的总数
      {
        lenChar += this.richTextBox1.Lines[i].Length; //把每行的字符个数赋值给lenChar.改变[i]的
                               //值,也就是改变了行数,
                               //每行的字符串个数不一样Length中的值也会变
        builder.Append(richTextBox1.Lines[i].ToString()+"\r\n");//获取文本框中的某行,返回原来的 ???
                                    //字符串并且添加到builder尾部
        if (i==3)
        {
          //在第4行和第5行之间插入特定字符串
          // this.richTextBox1.Text.Insert(lenChar, str);
          builder.Append(str + "\r\n");       //在builder后添加str中的字符串"插入字符串"
        }
      }                        //当i不等于3时,直接执行到这一步,
                               //并返回到for语句重新开始.
                               //实际上程序没做什么事
       richTextBox1.Text = builder.ToString();     //全部文本添加到builder后,字符串中没有\n  ?????
                               //经过ToString转换后有\n
    
    2011年3月16日 2:48

答案

  • richTextBox1.Lines[i]是string类型的数组(按\n分割),因为他本身就是string类型的,所以没必要再调用它的实例方法ToString().

    builder就不是string类型的了,所以StringBuilder重写了 ToString方法,返回添加进去的字符串,返回类型是string.

    虽说都是ToString(),但是调用它的类型不同,意义也就不同了。


    richTextBox1.Lines[i]分割行后,“\N”就没有了,数组中存的只是值了。builder.AppendLine()会添加换行符。
    Append就是单单的把字符追加上去就完事了
    • 已标记为答案 杲大盛 2011年3月16日 5:17
    2011年3月16日 4:29

全部回复

  • richTextBox1.Lines[i]是string类型的数组(按\n分割),因为他本身就是string类型的,所以没必要再调用它的实例方法ToString().

    builder就不是string类型的了,所以StringBuilder重写了 ToString方法,返回添加进去的字符串,返回类型是string.

    虽说都是ToString(),但是调用它的类型不同,意义也就不同了。


    richTextBox1.Lines[i]分割行后,“\N”就没有了,数组中存的只是值了。builder.AppendLine()会添加换行符。
    Append就是单单的把字符追加上去就完事了
    • 已标记为答案 杲大盛 2011年3月16日 5:17
    2011年3月16日 4:29
  • 设断点停在最后一句上,用鼠标悬浮在builder上,这时看到的数组是连续的中间没有\n,执行这句后\n加上了,是否是builder.ToString();有加\n的功能? 
    richTextBox1.Text = builder.ToString(); 
    
    
    2011年3月16日 5:27
  • 你可以看一下builde的私有字段【m_StringValue】,这个字段中是有“\n”的,我的观点是我们取得的是builder存储的数据,“\n”是控制格式的,当我要查看builder的数据时,是不想看到\n..\t....等等的转义字符的(显得特乱)。但当我把这些数据现在在某个地方时又希望它以事先格式化好的格式显示,所以\n还是实际存在的,ToString()不会有加\n功能,我感觉是这么回事,说的有点乱,呵呵
    学无止境,我喜欢这种感觉。。。
    2011年3月17日 1:30