我想在数组中保存对字符串的引用。例如:
string x = "x", y="y", z="z";
string array[];
我希望该数组将保存对x,y,z的引用。所以,如果我将数组[0]更改为“xx”,则x将包含“xx”
由于 莫蒂
答案 0 :(得分:2)
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”!
答案 1 :(得分:1)
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,则数组[0] .Value也将更改。
答案 2 :(得分:0)
答案 3 :(得分:0)
无法做到。 C#中的字符串是不可变的,这意味着您根本无法更改它们,您只能更改字符串引用。而且你不能创建一个字符串引用数组(除非你诉诸不安全的代码 - 不要去那里)。
您需要使用其他一些结构来保存数据。如某人建议的那样Dictionary<string, string>
是可能的。或者,您始终可以通过阵列访问字符串。
答案 4 :(得分:0)
通过阅读评论我达到目标:)
备份敌人最后知道的位置......实际上我是这样做的。 如果您有更好的解决方案,请显示^ _ ^
if (EnemyLKP != EnemyLKPBackup[2])
{
EnemyLKPBackup[1] = EnemyLKPBackup[2];
EnemyLKPBackup[0] = EnemyLKPBackup[1];
EnemyLKPBackup[2] = EnemyLKP;
}