如何通过引用将字符串传递到集合中
本文关键字:集合 字符串 何通过 引用 | 更新日期: 2023-09-27 18:25:01
字符串似乎是引用,但由值复制
List<string> data = new List<string>();
string s = "a";
data.Add(s); // copy by value??
s = "b";
Console.WriteLine(data[0]); // "a"
类似乎也是由引用复制的引用
class boxstring { public string val; }
List<boxstring> data = new List<boxstring>();
boxstring s = new boxstring { val = "a" };
data.Add(s); // copy by reference, ok
s.val = "b";
Console.WriteLine(data[0].val); // "b"
有没有一种更简单的方法可以通过引用将字符串传递到集合中,而不将其包装到类中我想将对象成员传递到集合中,如果对象发生了更改,那么也应该在不编写额外代码的情况下更改集合。
字符串是不可变的,如果您希望容器中的对象发生更改,它们必须是可变的。因此,您必须像以前一样将它们封装在一个类中。
然而,.NET已经提供了字符串的可变对应项,即"StringBuilder
"。这将为您工作-
List<StringBuilder> data = new List<StringBuilder>();
StringBuilder s = new StringBuilder("a");
data.Add(s);
s.Clear();
s.Insert(0, "b");
Console.WriteLine(data[0]); // "b"
这里有一个让代码更简单的想法:
public MyString
{
public string Value{get;set;}
public MyString(string value)
{
Value=value;
}
public static implicit operator MyString(string value)
{
return new MyString(value);
}
public static implicit operator string(MyString mystring)
{
if(mystring==null) return null;
return mystring.Value;
}
然后,只要您想通过引用获得字符串,就可以使用MyString对象。由于我们有这些隐式运算符,您可以使用MySString而不是字符串
不能通过引用传递内部数据类型,它们总是通过值传递的。内部类型包括Int32、String、Bool等基本类型。