首页 新闻 会员 周边

int类型转换成string类型,转换失败!求解释~求解释~

0
悬赏园豆:20 [已解决问题] 解决于 2012-07-11 21:39

代码如下: 

  object[] sendData = new object[1024 * 1024];      

  string sendDatastr = "";     

      string c = "";
      for (int i = 0; i <1024*1024; i++)
      {
          sendDatastr += (sendData[i] as string);();//sendData[i]中包含1M个uint类型数据

          // c = (string)(sendData[i]);//注意:若是加入这句,就会显示强制转换uint到string失败
           //sendDatastr+=  sendData[i].Convert.ToString();//这个是正确,但由于效率低的不能接受

    }

  return sendDatastr;

问题:运行结果是sendDatastr=“ ”,也就是说 (sendData[i] as string)是失败的,为什么呢?求解释啊~

< >
分享
最佳答案
0

用.ToString方法,同时用StringBuilder.Append代替string的相加操作。

收获园豆:20
水牛刀刀 | 大侠五级 |园豆:6350 | 2012-07-11 16:27

那个也太慢了哈,要循环1024*1024次的。“同时用StringBuilder.Append代替string的相加操作。”可以提高效率的吗?

博客园的初学者 | 园豆:181 (初学一级) | 2012-07-11 16:28

@博客园的初学者: 个人感觉效率是一样的,两者皆同。

张晓鹏 | 园豆:200 (初学一级) | 2012-07-11 16:47

@张晓鹏: 真的是太感谢了,StringBuilder.Append这个真的是太好用了,效率提高不知道有多少倍,不管是用Convert.ToString()还是用.ToString() ,都很快。效率问题已经完全解决了,谢谢哈~

博客园的初学者 | 园豆:181 (初学一级) | 2012-07-11 16:55
其他回答(3)
0

既然这么看重效率,为什么uint类型数据用object数组(引起额外的装箱操作)?

既然这么看重效率,为什么要把uint类型数据再全部转换为string?

 

dudu | 园豆:30994 (高人七级) | 2012-07-11 16:52

因为要用as string就应该是 string temp=(object obj[i] as string),所以才把数组定义成object[],而其中存其实是uint的数据。但是如果这样用(uint obj[i]as string)本身是错的啊。

支持(0) 反对(0) 博客园的初学者 | 园豆:181 (初学一级) | 2012-07-11 17:00
0

MSDN

expression as type
//等效于
expression is type ? (type)expression : (type)null

2 is string ? (string)2:null;//2 is string肯定是false嘛。所以转换不成功嘛。

 

他在转换的时候做了类型判断。。

俗人... | 园豆:83 (初学一级) | 2012-07-11 16:58

我明白你的意思了,但我还不明白若判断"a” as string? (string)"a":null;//结果是true,但这个显然不用再转换的啊。

那我是不是可以说,若是string类型的则是true;若不是string则是false。那结论是 as string 分明是不能用来进行将其他类型的数据转换成string类型的吧??这个结论是对的吗?

支持(0) 反对(0) 博客园的初学者 | 园豆:181 (初学一级) | 2012-07-11 17:14

@博客园的初学者: 

不是不能用来转换,而是只能用在同种类型之间的转换,同种类型包括继承关系的两种类型。

比如:

object a = "a"; //此处a是用object 声明的,但是他实际它是string类型的。
string b = a;// 虽然它是string类型的,但是你这样直接赋值肯定不行嘛。
string c = a as string;//所以你需要转换,这样才对的。
支持(0) 反对(0) 俗人... | 园豆:83 (初学一级) | 2012-07-11 17:23
0
            object[] sendData = new object[1024 * 1024];

            StringBuilder sb = new StringBuilder();

            string c = "";
            for (int i = 0; i < 1024 * 1024; i++)
            {
                sb.Append(sendData[i].ToString());
            }

            return sendDatastr;

StringBuilder效率比字符串相加高
还有,dudu说的精辟

CrazyJinn | 园豆:799 (小虾三级) | 2012-07-11 16:59

是滴~您说的很对,我也刚试过了,哈哈~谢谢

支持(0) 反对(0) 博客园的初学者 | 园豆:181 (初学一级) | 2012-07-11 17:09

@博客园的初学者: StringBuilder也要分情况使用。一般来说循环小于500次的时候,字符串直接相加反而是快的。你可以google关键字“Performance considerations for strings in C#”

顺便说一句,问题解决了的话就把帖结了吧

支持(0) 反对(0) CrazyJinn | 园豆:799 (小虾三级) | 2012-07-11 17:18

需要设置一下StringBuilder的初始容量(大于或等于实际写入的字符数),这样效率会更高

支持(0) 反对(0) dudu | 园豆:30994 (高人七级) | 2012-07-11 17:39
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册