如果您不喜欢 Matthew Watson 的回答并且您想坚持自己的方法,那么可以使用 StringBuilder。这是一个可以在不创建新值的情况下更改其值的字符串!
我的意思是:
普通字符串的值无法更改,正在发生的事情是正在创建一个新字符串......并且指针(指向您要更改其值的字符串)从现在开始指向这个新字符串. 所有其他指针......“指向”旧字符串......仍然指向......旧字符串!(字符串的值没有改变!)
我不确定这是否足够清楚,但你如果你想玩 Strings,就必须明白这一点。这正是 s1 不能改变它的值的原因。
解决方法是使用 StringBuilder:
class test
{
public StringBuilder get() { return s; }
private StringBuilder s = new StringBuilder("World");
}
class modifier
{
public static void modify(StringBuilder v)
{
v.Append("_test");
}
}
还有一些测试代码:(当然,所有这些都伴随着处理成本......但我认为现在这不是问题)
StringBuilder s1 = new StringBuilder("Earth");
System.Diagnostics.Debug.WriteLine("earth is {0}", s1);
modifier.modify(s1); //<-------- OK
System.Diagnostics.Debug.WriteLine("earth is {0}",s1);
test c=new test();
StringBuilder aa=c.get();
System.Diagnostics.Debug.WriteLine("earth is {0}", aa);
modifier.modify(aa); //<------- Error(not anymore)
System.Diagnostics.Debug.WriteLine("earth is {0}", c.get());
在使用代码之前,请尝试了解 String 和 StringBuilder 的工作原理