2014-11-02 91 views
0

也許是它的一個菜鳥問題,但我需要更改List內的字符串值。更改列表內的字符串值

public string TopU1_N; 
private List<string> TopScores; 

void Start() 
{ 
    TopScores = new List<string>(); 

    TopScores.Add(TopU1_N); 
    TopScores.Add(TopU2_N); 

    TopScores[0]="100"; 
    TopScores[1]="200"; 

    print("Top1: " + TopU1_N); 
    print("Top2: " + TopU2_N); 
} 

我需要打印這樣的結果:100,200。 這是寫爲團結

+2

你有什麼問題?它與指針有什麼關係? – Rotem 2014-11-02 09:06:47

回答

2

在.NET字符串是不可變的類型。這意味着即使您更改了TopScores[0]的值,也不會影響您之前分配的TopU1_N的值。

爲了達到此目的,您需要使用List<SomeType>

例如:

public class SomeType 
{ 
    public string Value { get; set; } 
} 

然後:

SomeType myType = new SomeType(); 
myType.Value = "OLD VALUE"; 

List<SomeType> list = new List<SomeType>(); 
list.Add(myType); 
list[0].Value = "NEW VALUE"; 

Console.WriteLine(myType.Value); // prints NEW VALUE 
+0

您還可以向SomeType中的字符串添加隱式轉換,以使其閱讀消耗更容易。 – galenus 2014-11-02 09:33:05

+0

這不是關於字符串的不變性。這是關於它複製引用到字符串的事實,而列表中的引用發生更改時,原始變量引用不是。 – Enigmativity 2014-11-02 09:44:35

+0

如果你懶,你可以使用'Tuple '。 – IllidanS4 2014-11-02 14:57:52

-1

您需要使用不安全的代碼做你想要什麼。 我認爲這可能有效。

public string TopU1_N; 
    public string TopU2_N; 
    private object TopScores; 

    void Start() 
    { 

     unsafe 
     { 

     TopScores = new List<string *>(); 

     TopScores.Add(&TopU1_N); 
     TopScores.Add(&TopU2_N); 

     *(TopScores[0])="100"; 
     *(TopScores[1])="200"; 

     print("Top1: " + TopU1_N); 
     print("Top2: " + TopU2_N); 
    } 
} 

請嘗試編譯它。

+0

您不能使用'string *'類型,因爲'string'是一個託管類型。儘管如此,指針類型不能用作泛型類型參數。你可能想修改內存中的字符串,這真的很糟糕,根本不推薦。 – IllidanS4 2014-11-02 14:54:55