Pourquoi ssortingng.Replace (“X”, “Y”) ne fonctionne que lorsque affecté à une nouvelle chaîne?

Je suppose que cela doit faire quelque chose avec ssortingng étant un type de référence mais je ne comprends pas pourquoi simplement ssortingng.Replace("X","Y") ne fonctionne pas?

Pourquoi dois-je faire la ssortingng A = ssortingngB.Replace("X","Y") ? Je pensais que c’était juste une méthode à faire sur des instances spécifiques.

EDIT: Merci jusqu’ici. Je prolonge ma question: Pourquoi b+="FFF" fonctionne-t-il mais pas b+="FFF" b.Replace ?

Ssortingng.Replace est une fonction partagée de la classe ssortingng qui retourne une nouvelle chaîne. Ce n’est pas un opérateur sur l’object actuel. b.Replace (“a”, “b”) serait similaire à une ligne qui n’a que c + 1. Donc, tout comme c = c + 1, la valeur de c + 1 est définie sur c, b = b.Replace (“a”, “b”) définit la nouvelle chaîne renvoyée à b.

Parce que les ficelles sont immuables. Chaque fois que vous modifiez une chaîne .net crée un nouvel object chaîne. C’est une propriété de la classe.

Objets immuables
Objet Ssortingng

Pourquoi ssortingngA.Replace("X","Y") fonctionne-t-il pas?
Pourquoi dois-je faire ssortingngB = ssortingngA.Replace("X","Y"); ?

Parce que les chaînes sont immuables dans .NET. Vous ne pouvez pas modifier la valeur d’un object chaîne existant, vous pouvez uniquement créer de nouvelles chaînes. ssortingng.Replace crée une nouvelle chaîne que vous pouvez ensuite affecter à quelque chose si vous souhaitez y conserver une référence. De la documentation:

Retourne une nouvelle chaîne dans laquelle toutes les occurrences d’une chaîne spécifiée dans l’instance actuelle sont remplacées par une autre chaîne spécifiée.

L’accent est à moi.


Donc, si les chaînes sont immuables, pourquoi b + = “FFF”; travail?

Bonne question.

Notez tout d’abord que b += "FFF"; est équivalent à b = b + "FFF"; (sauf que b n’est évalué qu’une fois).

L’expression b + "FFF" crée une nouvelle chaîne avec le résultat correct sans modifier l’ancienne chaîne. La référence à la nouvelle chaîne est ensuite affectée à b remplacement de la référence à l’ancienne chaîne. S’il n’y a pas d’autres références à l’ancienne chaîne, celle-ci deviendra éligible pour la récupération de place.

Les chaînes sont immuables, ce qui signifie qu’une fois qu’elles sont créées, elles ne peuvent plus être changées. Cela a plusieurs raisons, autant que je sache, principalement pour la performance (comment les chaînes sont représentées en mémoire).

Voir aussi (parmi beaucoup d’autres):

Conséquence directe de cela, chaque opération de chaîne crée un nouvel object chaîne. En particulier, si vous faites des choses comme

 foreach (ssortingng msg in messages) { totalMessage = totalMessage + message; totalMessage = totalMessage + "\n"; } 

vous créez en fait potentiellement des dizaines ou des centaines d’objects chaîne. Donc, si vous voulez manipuler les chaînes de manière plus sophistiquée, suivez les indications de GvS et utilisez SsortingngBuilder.

Les cordes sont immuables. Toute opération qui les change doit créer une nouvelle chaîne.

SsortingngBuilder prend en charge la méthode inline Replace.

Utilisez SsortingngBuilder si vous devez manipuler beaucoup de chaînes.

Pourquoi “b + =” FFF “fonctionne alors que b.replace n’est pas

Parce que l’opérateur + = assigne les résultats à l’opérande gauche, bien sûr. C’est juste un coup de main pour b = b + "FFF"; .

Le fait est que vous ne pouvez changer aucune chaîne dans .Net. Il n’y a pas de méthodes d’instance pour les chaînes – vous devez toujours affecter les résultats d’une opération à une référence de chaîne quelque part.

Oui c’est une méthode de System.Ssortingng. Mais vous pouvez essayer a = a.Replace (“X”, “Y”);

Comme tout le monde l’a dit, les chaînes sont immuables.

Cela signifie que lorsque vous effectuez votre remplacement, vous obtenez une nouvelle chaîne plutôt que de modifier la chaîne existante.

Si vous ne stockez pas cette nouvelle chaîne dans une variable (comme dans la variable déclarée), votre nouvelle chaîne ne sera sauvegardée nulle part.

Pour répondre à votre question détaillée, b + = “FFF” équivaut à b = b + “FFF”. Vous créez donc également une nouvelle chaîne.

Juste pour être plus explicite. ssortingng.Replace (“X”, “Y”) retourne une nouvelle chaîne … mais puisque vous n’atsortingbuez la nouvelle chaîne à rien, la nouvelle chaîne est perdue.