当前位置:编程学习 > C#/ASP.NET >>

遇见一个十分诡异的问题,分数不多,但希望大家能进来看看

System.Text.StringBuilder sb = new System.Text.StringBuilder();
                for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
                {
                    string doc1 = ds.Tables[0].Rows[i]["Msg"].ToString();
                    string doc = Encrypt.AESDecrypt(doc1);
                    sb.Append(doc);
                    Console.WriteLine(sb.ToString());
                }
                IE.Document.Body.InnerHtml = sb.ToString();

代码很简单,但执行效果和预想很不同,废话不多说,直接上图这是I=0时doc的值.这是sb.append后sb.tostring的值,结果正确.这是i=1时doc的值,这是i=1时sb.append后的sb.tostring,注意,这里I=1时doc的值完全没有append进去,整个循环跑完后,只有I=0时doc的值被append进去,这是咋回事?
--------------------编程问答-------------------- 我只注意到抹掉的部分是靳刚。 --------------------编程问答--------------------
引用 1 楼 danding_ge 的回复:
我只注意到抹掉的部分是靳刚。
好吧,你赢了 --------------------编程问答-------------------- 没看到“这是i=1时doc的值”
你确定
string doc = Encrypt.AESDecrypt(doc1);
得到的doc 是可见字符串?
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/ --------------------编程问答-------------------- 事出蹊跷必有妖。 --------------------编程问答--------------------
引用 3 楼 feiyun0112 的回复:
没看到“这是i=1时doc的值”
你确定
string doc = Encrypt.AESDecrypt(doc1);
得到的doc 是可见字符串?
  
*****************************************************************************
签名档: http://feiyun0112.cnblogs.com/
抱歉,写的有些乱.doc的确是可见的,i=1时doc的值在第三张图上,i=0时doc的值在第一张图上,两个值在时间上有所区别 --------------------编程问答-------------------- --------------------编程问答-------------------- 把 Console.WriteLine(sb.ToString());去掉试一试,

印象中ToString调用后就不能修改stringbuilder了。 --------------------编程问答-------------------- 十分诡异,此事必有蹊跷 --------------------编程问答--------------------
引用 7 楼 findcaiyzh 的回复:
把 Console.WriteLine(sb.ToString());去掉试一试,

印象中ToString调用后就不能修改stringbuilder了。

去掉了,也是一样... --------------------编程问答--------------------
引用 7 楼 findcaiyzh 的回复:
把 Console.WriteLine(sb.ToString());去掉试一试,

印象中ToString调用后就不能修改stringbuilder了。


写了点代码测试下,调用ToString()不会影响

            StringBuilder sb = new StringBuilder();
            sb.Append("aaaaaa");
            string res = sb.ToString();

            sb.Append("bbbbbb");
            res = sb.ToString(); --------------------编程问答--------------------
引用 1 楼 danding_ge 的回复:
我只注意到抹掉的部分是靳刚。


+1 看热闹的 楼上的都是高手 --------------------编程问答-------------------- 或者你的 Rows[i]["Msg"].ToString() 有问题,或者你的 Encrypt.AESDecrypt有问题。

下边显示abcde这个结果,一点问题都没有。

using (DataTable  dt = new DataTable ())
        {
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Msg", typeof(string));
            dt.Rows.Add(1, "a");
            dt.Rows.Add(2, "b");
            dt.Rows.Add(3, "c");
            dt.Rows.Add(4, "d");
            dt.Rows.Add(5, "e"); 
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string doc1 = dt.Rows[i]["Msg"].ToString();
                //string doc = Encrypt.AESDecrypt(doc1);
                sb.Append(doc1);
              //  Console.WriteLine(sb.ToString());
            }
            Label1.Text  = sb.ToString();
        }
--------------------编程问答-------------------- 可能<br>后面还有什么不可见特殊字符,你看看sb.tostring().length和显示的长度是不是一样 --------------------编程问答--------------------
引用 12 楼 Imaor 的回复:
或者你的 Rows[i]["Msg"].ToString() 有问题,或者你的 Encrypt.AESDecrypt有问题。

下边显示abcde这个结果,一点问题都没有。

using (DataTable  dt = new DataTable ())
        {
            dt.Columns.Add("ID", typeof(int));
            dt.Columns.Add("Msg", typeof(string));
            dt.Rows.Add(1, "a");
            dt.Rows.Add(2, "b");
            dt.Rows.Add(3, "c");
            dt.Rows.Add(4, "d");
            dt.Rows.Add(5, "e"); 
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                string doc1 = dt.Rows[i]["Msg"].ToString();
                //string doc = Encrypt.AESDecrypt(doc1);
                sb.Append(doc1);
              //  Console.WriteLine(sb.ToString());
            }
            Label1.Text  = sb.ToString();
        }

doc每次的结果在监视器里看都是正常的,但就是无法append进去. --------------------编程问答--------------------
引用 13 楼 feiyun0112 的回复:
可能<br>后面还有什么不可见特殊字符,你看看sb.tostring().length和显示的长度是不是一样
这是append之后doc和sb的长度.另外,刚刚发现<br>后面有许多\0这个应该不会影响吧 --------------------编程问答-------------------- 解决了,还真是\0的问题stringbuilder以\0分割...
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,