请教一个关于类库的疑问

qiance 2009-04-20 09:27:00
.net类库的string类里,想replace,substring这些函数,为什么调用他们后不改变现有的字符串
比如

string str="abcde";
str.Replace('a','A');


过后str仍旧是"abcde"
为什么要这么设计
c++中的string类与它就不同,replace后直接改变自身了

请教。。。为什么会这么设计。。
...全文
84 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
soaringbird 2009-04-20
  • 打赏
  • 举报
回复
字符串是 Unicode 字符的有序集合,用于表示文本。String 对象是 System..::.Char 对象的有序集合,用于表示字符串。String 对象的值是该有序集合的内容,并且该值是不可变的。

String 对象称为不可变的(只读),因为一旦创建了该对象,就不能修改该对象的值。看来似乎修改了 String 对象的方法实际上是返回一个包含修改内容的新 String 对象。如果需要修改字符串对象的实际内容,请使用 System.Text..::.StringBuilder 类。
xfzzmzj 2009-04-20
  • 打赏
  • 举报
回复
原因是:
c#中的string是一旦创建,就不能改变,只能销毁,
这种设计是和 一般的思路是不一样的,说是为了提高效率,其实我觉得只是一个弥补.net缺陷的一种方法,
包括不能直接修改装箱的值类型,也是一种缺陷,c#的缺陷,c++/cli可以,
这些设计和常理不符,
编程的时候需要特别注意。
zucc_sjj 2009-04-20
  • 打赏
  • 举报
回复
LS都帮你解决了。。我只是来看下。好好把基础打下吧。。。。每样语言总有点不同的,但也有相通。试着去体会~
LZ加油!!!
windbody 2009-04-20
  • 打赏
  • 举报
回复
string str = "abcde";
string dd = str.Replace('a', 'A');
输入dd,看看是不是你想要的!
呵呵...我也是菜鸟!!!
panyunlai 2009-04-20
  • 打赏
  • 举报
回复
c#中的string是不能改变的,不过可以这样
string str="abcde";
str=str.Replace('a','A');
风骑士之怒 2009-04-20
  • 打赏
  • 举报
回复

string str = "abcde";
string a = str.Replace('a', 'A');
Console.Write(a);
Console.ReadLine();


string是引用类型,字符串是不可变的。

参见:http://msdn.microsoft.com/zh-cn/library/362314fe(VS.80).aspx
白s菜 2009-04-20
  • 打赏
  • 举报
回复
正确理解string 和stringbulider
yangqidong 2009-04-20
  • 打赏
  • 举报
回复
为了提高CLR的某些效率,C#的字符串设计成不可修改,也就是说字符串操作并不会作用在原来的字符串之上,而是返回一个新的字符串
vrhero 2009-04-20
  • 打赏
  • 举报
回复
c++中的string类与它就不同,replace后直接改变自身了
--------
你认为这样安全吗?C++的指针操作带来高效的同时制造了更多的让程序员头疼的陷阱...
vrhero 2009-04-20
  • 打赏
  • 举报
回复
去看看什么叫返回值...

111,126

社区成员

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

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

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