String函数不更新全局变量

时间:2012-01-16 09:29:17

标签: c# string

我不知道为什么这不起作用,我只是传递一个空白字符串和一个数字,它应该检查该数字是否在字符串中,如果没有那么它应该将它添加到字符串中。变量'thing'得到设置但它应该更新的全局变量(strduplicates)永远不会更新。

我这样调用这个函数 Trackstats(strduplicates, “1337”);

     private void TrackStats(string thing, string variable)
    {
        if (!(thing.Contains(variable)))
        {
            thing += variable + ",";
        }           
    }

4 个答案:

答案 0 :(得分:3)

更好的设计可能是返回新值:

private string TrackStats(string thing, string variable)
{
    if (!(thing.Contains(variable)))
    {
        thing += variable + ",";
    }         

    return thing;  
}

并使用:

调用它
strduplicates = this.TrackStats(strduplicates, "1337");

答案 1 :(得分:1)

您按值传递thing。您需要通过引用传递它以使更改在方法外可见:

private void TrackStats(ref string thing, string variable)
{
    if (!(thing.Contains(variable)))
    {
        thing += variable + ",";
    }           
}

答案 2 :(得分:1)

.NET中的字符串是不可变的。每次修改都将分配并返回一个新实例。

要更改全局变量,必须将其作为ref参数传递,如下所示:

 private void TrackStats(ref string thing, string variable) 
{ 
    if (!(thing.Contains(variable))) 
    { 
        thing += variable + ","; 
    }            
} 

然后你可以这样称呼它:

TrackStats(ref strduplicates, "42");

答案 3 :(得分:0)

string thing不是输出参数。使用'out string thing'来表示输出。