C# 字符串操作中 + 和 stringbulilder 的相同和区别

googlegis 2008-03-13 11:04:12
在 转载 flyinggis 的文章ArcGIS server学习 三种有一个查询条件的就是在 txtquery 里面写上 "Name Like '%号%'",我想把它改成直接在txtquery中输入名字,用字符串来表示查询条件:

原文是这样的, 在txtquery 中输入 Name Like '%号%' , spatialfilter.WhereClause = txtQuery.Text;

我后来改成 在txtquery中输入 号 在代码中这样写:spatialfilter.WhereClause = "Name Like '%" +txtQuery.Text +"% '";可是却始终没有结果显示,这本来是一个查询图元并高亮显示的代码,直接写 Name Like '%号%' ,能显示结果,写成 "Name Like '%" +txtQuery.Text +"% '” 却不能显示,一直试了很多次都不知道原因在哪里,后来想到换个函数看怎么样?

System.Text.StringBuilder sb = new System.Text.StringBuilder("");
sb.Append("Name Like '%");
sb.Append(txtQuery.Text);
sb.Append("%'");
spatialfilter.WhereClause = sb.ToString();

竟然能用了,呵呵,不知道什么原因?

C# 字符串操作中 + 和 stringbulilder 的相同和区别到底是什么呢? 什么时候可以通用,什么时候不能通用呢?还望高手指点啊。


...全文
95 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
iamXiaMi 2008-03-13
  • 打赏
  • 举报
回复
一个是建立新的引用,令一个是在数组溢出时才建立新的~

比如说
string x = "hello world !";
其实就是
char[] x = new char[13]{'h','e'.....}; //后面意思意思~

x += "?";
int len = char.length + ("?").length;
char[] x = new char[len]{'h','e'.....,'?'};
应该差不多是这个意思~~


而StringBulider是建立一个你规定或者默认(默认好像是54)的数组,然后添加字符进去~如果长度溢出,则自动填充你规定的长度,填充长度就是建立新的引用!
就是每次StringBuilder不是每次都建立新的引用~所以效率高点~
wuhongyao3 2008-03-13
  • 打赏
  • 举报
回复
貌似
string + 的时候 好像是声明了很多string变量
而builder只是操作原来的变量

个人理解
期待高手
wuhongyao3 2008-03-13
  • 打赏
  • 举报
回复
效率问题吧
我面试的时候 就被问到了这个问题
yeqingit 2008-03-13
  • 打赏
  • 举报
回复
StringBuilder是对底层类型的直接操作,string类型的变量一旦创建了字符串对象就无法修改,string类型的修改操作实际是创建副本操作的,所以效率低。
b哈利路亚d 2008-03-13
  • 打赏
  • 举报
回复
正常应该只是效率上有区别,如果执行5000次字符串连接
就能看出sb速度上的优势,别的应该没什么不同。
你加()试试。

110,539

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧