2012-01-16 67 views
1

即時通訊不知道爲什麼這不工作,我只是傳遞一個空白字符串和一個數字,它應該檢查如果該數字是在字符串中,如果不是,那麼它應該將它添加到字符串中。變量'thing'被設置,但它應該更新(strduplicates)的全局變量永遠不會被更新。字符串函數不更新全局變量

我稱之爲這樣的功能 Trackstats(strduplicates,「1337」);

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

通過設計。使它成爲'ref string thing'。 – 2012-01-16 09:32:43

+1

請參閱http://stackoverflow.com/questions/1096449/c-sharp-string-reference-type – nulltoken 2012-01-16 09:33:56

+0

感謝它的工作! – Batista 2012-01-16 09:38:20

回答

1

您按照價值通過thing。您需要按引用傳遞它使該方法外部可見的變化:

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

字符串事情不是輸出參數。使用'out string thing'來表示輸出。

+3

我認爲他需要ref,因爲在調用方法之前,東西似乎已經有了一個值。 out期望您傳遞一個具有默認值的變量。 – Tudor 2012-01-16 09:33:25

3

更好的設計可能是返回新值:

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

    return thing; 
} 

,並使用調用它:

strduplicates = this.TrackStats(strduplicates, "1337"); 
1

.NET中的字符串是不可變的。每次修改都會分配並返回一個新實例。

要改變你的全局變量,你必須把它作爲ref參數,就像這樣:

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

然後,你可以這樣調用:

TrackStats(ref strduplicates, "42"); 
+0

感謝它的工作! – Batista 2012-01-16 09:38:25

+0

@Batista:如果問題解決了,你可以將答案標記爲「接受答案」,從而給予回答更多分數的人。 – Tudor 2012-01-16 09:44:56