C#保存对数组中字符串变量的引用

时间:2012-12-24 07:19:14

标签: c# arrays string reference

我想在数组中保存对字符串的引用。例如:

string x = "x", y="y", z="z";
string array[];

我希望该数组将保存对x,y,z的引用。所以,如果我将数组[0]更改为“xx”,则x将包含“xx”

由于 莫蒂

5 个答案:

答案 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)

也许尝试使用

Dictionary<string,string> 

代替:

http://www.dotnetperls.com/dictionary

答案 3 :(得分:0)

无法做到。 C#中的字符串是不可变的,这意味着您根本无法更改它们,您只能更改字符串引用。而且你不能创建一个字符串引用数组(除非你诉诸不安全的代码 - 不要去那里)。

您需要使用其他一些结构来保存数据。如某人建议的那样Dictionary<string, string>是可能的。或者,您始终可以通过阵列访问字符串。

答案 4 :(得分:0)

通过阅读评论我达到目标:)

备份敌人最后知道的位置......实际上我是这样做的。 如果您有更好的解决方案,请显示^ _ ^

    if (EnemyLKP != EnemyLKPBackup[2])
        {
            EnemyLKPBackup[1] = EnemyLKPBackup[2];
            EnemyLKPBackup[0] = EnemyLKPBackup[1];
            EnemyLKPBackup[2] = EnemyLKP;
        }