gpt4 book ai didi

c# - 如何获取可变字符串列表?

转载 作者:行者123 更新时间:2023-11-30 19:03:07 26 4
gpt4 key购买 nike

我有如下一段代码

  List<String> l = new List<String>();
String s = "hello";
l.Add(s);
s = "world";

当我设置一些断点并执行程序时,执行完最后一行后,列表中的值仍然是 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);
}
}

并在您的列表中使用它。然后引用将指向该类,但您可以在其中包含字符串值。为了让它变得更好,覆盖 implicit 与字符串的转换,这样您甚至不需要看到您正在与 SortOfMutableString 对话。

请参阅 Jon Skeet 的回答,以获得关于 C# 中字符串的非常准确的解释,我什至不会打扰!

替代类名:

  • 伪可变字符串
  • ICantBelieveItsNotMutable
  • HappyAndReferenceableString

关于c# - 如何获取可变字符串列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6913435/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com