¿Por qué no lo hace stringA.Replace("X","Y")
trabajo?
¿Por qué tengo que hacer stringB = stringA.Replace("X","Y");
?
Porque las cadenas son inmutables en .NET. No puede cambiar el valor de un objeto de cadena existente, solo puede crear nuevas cadenas. string.Replace
crea una nueva cadena que luego puede asignar a algo si desea mantener una referencia a la misma. A partir de la documentación:
devuelve una nueva cadena en la que todas las apariciones de una cadena especificada en la instancia actual se sustituyen con otra cadena especificada.
Énfasis mío.
Así que si las cadenas son inmutables, ¿por qué b + = "FFF"; ¿trabajo?
Buena pregunta.
Primero tenga en cuenta que b += "FFF";
es equivalente a b = b + "FFF";
(excepto que b solo se evalúa una vez).
La expresión b + "FFF"
crea una nueva cadena con el resultado correcto sin modificar la cadena anterior. La referencia a la nueva cadena se asigna a b
reemplazando la referencia a la cadena anterior. Si no hay otras referencias a la cadena anterior, entonces será elegible para la recolección de basura.
La razón subyacente de esto es porque las cadenas son inmutables, es decir, no se pueden cambiar. Consulte la respuesta de @Kevin. Para mí es un error en Microsofts, ya que el nombre del método es engañoso. – James
¿Qué quiere decir con una "Cadena".Reemplazar es una función compartida "y" no es un operador en el objeto actual "? –
@James, las cadenas son inmutables, pero las variables no lo son. El OP parece querer saber por qué el valor de la variable no es cambiado, pero es la mala convención de nomenclatura lo que causa el problema, no la inmutabilidad de las cadenas. @Mark, pobre redacción de mi parte. Quise decir que actúa como una función compartida, no que sea una. Y como una referencia tipo, actúa en la cadena referenciada, no en la referencia. –