2012-12-24 54 views
3

我想保存對數組中字符串的引用。例如:C#保存對字符串變量的引用

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

我想這個數組將保存對x,y,z的引用。因此,在情況下,我將改變陣列[0]設置爲「XX」,則X將包括「XX」

由於 莫蒂

+0

注:這是不可能的「參考」一變量(除了'在參數REF/out',但那是不同的),在C#;這與PHP說的不同(有許多方法可以完成這個任務,但並不完全如我們所設想的那樣)。 – 2012-12-24 07:31:54

回答

0

它不能這樣做。 C#中的字符串是不可變的,這意味着你不能改變它們,你只能改變字符串引用。而且你不能創建一個字符串引用數組(除非你訴諸不安全的代碼 - 不要去那裏)。

您需要使用其他一些結構來保存您的數據。 A Dictionary<string, string>是有人建議的可能性。或者,您始終可以通過陣列訪問字符串。

1

有兩種類型在C#的類型系統「值類型「和」參考類型「。

值類型按值複製。當你複製一個,你會得到一個全新的對象。

引用類型通過引用複製。當你複製一個,你實際上是複製一個引用到一些存儲位置。

字符串是一種值類型,但您試圖使其行爲像一個引用類型。

您可以創建一個類的字符串屬性,然後使用這個類的一個數組:

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也會改變。

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

0

通過閱讀評論我達到目標:)

backuping敵人最後一個已知的位置...其實我做它在這條路上。 如果你有一個更好的解決方案,展示它^ _^

if (EnemyLKP != EnemyLKPBackup[2]) 
     { 
      EnemyLKPBackup[1] = EnemyLKPBackup[2]; 
      EnemyLKPBackup[0] = EnemyLKPBackup[1]; 
      EnemyLKPBackup[2] = EnemyLKP; 
     } 
相關問題