3

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

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

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

谢谢莫蒂

4

5 回答 5

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"!

于 2012-12-24T17:22:15.283 回答
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,那么 array[0].Value 也会改变。

于 2012-12-24T07:27:11.027 回答
0

也许尝试使用

Dictionary<string,string> 

反而:

http://www.dotnetperls.com/dictionary

于 2012-12-24T07:28:25.527 回答
0

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

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

于 2012-12-24T07:34:15.340 回答
0

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

备份 Enemy Last Know Position... 实际上我正在这样做。如果您有更好的解决方案,请展示它^_^

    if (EnemyLKP != EnemyLKPBackup[2])
        {
            EnemyLKPBackup[1] = EnemyLKPBackup[2];
            EnemyLKPBackup[0] = EnemyLKPBackup[1];
            EnemyLKPBackup[2] = EnemyLKP;
        }
于 2016-04-12T17:06:44.657 回答