我想保存对数组中字符串的引用。例如:
string x = "x", y="y", z="z";
string array[];
我希望该数组将保存对 x、y、z 的引用。所以,如果我将数组 [0] 更改为“xx”,那么 x 将包括“xx”
谢谢莫蒂
C# 中的字符串变量是不可变的。但是 StringBuilder 变量是可变的。
StringBuilder sb_x = new StringBuilder("x");
StringBuilder sb_y = new StringBuilder("y");
StringBuilder sb_z = new StringBuilder("z");
StringBuilder[] array = { sb_x, sb_y, sb_z };
array[0].Append("x");
现在 array[0] = "xx" 并且 sb_x 也是 "xx"!
C#类型系统中有“值类型”和“引用类型”两种类型。
值类型是按值复制的。当你复制一个时,你会得到一个全新的对象。
引用类型通过引用复制。当您复制一个时,您实际上是在复制对某个存储位置的引用。
String 是一种值类型,但您试图使其表现得像引用类型。
您可以使用 String 属性创建一个类,然后使用该类的数组:
public class StringWrapper
{
public String Value {get; set;}
}
然后你可以像这样使用它:
public class SomeOtherClass
{
public void SomeMethod()
{
StringWrapper[] array = new StringWrapper[3];
var x = new StringWrapper() { Value="X"; }
var y = new StringWrapper() { Value="y"; }
var z = new StringWrapper() { Value="z"; }
array[0] = x;
array[1] = y;
array[2] = z;
array[0].Value = "xx";
}
}
如果你改变 x.Value,那么 array[0].Value 也会改变。
这是不可能的。C# 中的字符串是不可变的,这意味着您根本无法更改它们,您只能更改字符串引用。而且你不能创建一个字符串引用数组(除非你使用不安全的代码——不要去那里)。
您需要使用其他一些结构来保存您的数据。正如有人建议的那样, ADictionary<string, string>
是一种可能性。或者,您始终可以通过数组访问字符串。
通过阅读评论我达到了目标:)
备份 Enemy Last Know Position... 实际上我正在这样做。如果您有更好的解决方案,请展示它^_^
if (EnemyLKP != EnemyLKPBackup[2])
{
EnemyLKPBackup[1] = EnemyLKPBackup[2];
EnemyLKPBackup[0] = EnemyLKPBackup[1];
EnemyLKPBackup[2] = EnemyLKP;
}