raf*_*lio 2 c# string reference
我有以下代码
List<String> l = new List<String>();
String s = "hello";
l.Add(s);
s = "world";
Run Code Online (Sandbox Code Playgroud)
当我设置一些断点并完成程序时,在执行最后一行之后,列表中的值仍然是hello而不是world.
它不应该相等world吗?字符串不是一个对象,我不只是将一个指针插入列表中吗?稍后,如果我将字符串更改为指向不同的值("world"),为什么我的列表仍然引用旧值?
我怎样才能达到理想的效果?非常感谢!
字符串是不可变的,因此不起作用.当您尝试设置它时,实际上是将指针放到旧字符串上并在引擎盖下创建一个新字符串.
要获得所需的效果,请创建一个包装字符串的类:
public class SortOfMutableString
{
public string Value {get;set;}
public SortOfMutableString(string s)
{
Value = s;
}
public static implicit operator string(SortOfMutableString s)
{
return s.Value;
}
public static implicit operator SortOfMutableString(string s)
{
return new SortOfMutableString(s);
}
}
Run Code Online (Sandbox Code Playgroud)
并在列表中使用它.然后引用将指向类,但您可以在其中包含字符串值.为了使它更好,可以覆盖implicit与字符串之间的强制转换,这样您甚至不需要看到您正在与之交谈SortOfMutableString.
请参阅Jon Skeet的答案,毫无疑问是对C#中字符串的非常准确的解释,我甚至都不打扰!
替代类名:
| 归档时间: |
|
| 查看次数: |
867 次 |
| 最近记录: |