2012-01-16 8 views
1

Je ne sais pas pourquoi cela ne fonctionne pas, Im simplement passer une chaîne vide et un nombre et il devrait vérifier si ce nombre est dans la chaîne, sinon il devrait l'ajouter dans la chaîne. La variable 'thing' est définie mais la variable globale qu'elle est supposée mettre à jour (strduplicates) n'est jamais mise à jour. J'appelle la fonction comme ceci: Trackstats (strduplicates, "1337");Chaîne Fonction ne mettant pas à jour la variable globale

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

conception. Faites-le 'ref string thing'. –

+1

voir http://stackoverflow.com/questions/1096449/c-sharp-string-reference-type – nulltoken

+0

Merci cela a fonctionné! – Batista

Répondre

1

Vous transmettez thing par valeur. Vous devez passer par référence à des changements visibles en dehors de la méthode:

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

chose de chaîne n'est pas un paramètre de sortie. Utilisez 'out string thing' pour signaler la sortie.

+3

Je pense qu'il a besoin de ref, parce que la chose semble avoir déjà une valeur avant d'appeler la méthode. out s'attend à ce que vous passiez une variable avec la valeur par défaut. – Tudor

3

Une meilleure conception pourrait être de retourner la nouvelle valeur:

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

    return thing; 
} 

et l'appeler à l'aide:

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

Les chaînes dans .NET sont immuables. Chaque modification va allouer et retourner une nouvelle instance.

Pour modifier votre variable globale, vous devez passer comme paramètre ref, comme ceci:

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

Ensuite, vous pouvez l'appeler comme ceci:

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

Merci cela a fonctionné! – Batista

+0

@Batista: Vous pouvez marquer une réponse comme "réponse acceptée" si elle a résolu votre problème, donnant ainsi à la personne qui a répondu plus de points. – Tudor

Questions connexes