2014-11-02 70 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