Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

182
Views
Referencia de cadena en C#

Como la cadena es tipo ref en dotnet, cuando actualizamos la variable x , ¿debería haber una actualización en y también? (ya que se refiere al valor de x). programa de muestra que se proporciona a continuación, ¿cómo el valor de y no cambia cuando se actualiza x?

 public void assignment() { string x= "hello"; string y=x; // referencing x as string is ref type in .net x = x.Replace('h','j'); Console.WriteLine(x); // gives "jello" output Console.WriteLine(y); // gives "hello" output }
over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Tienes razón en que, inicialmente, tanto x como y hacen referencia al mismo objeto:

 +-----------+ y -> | hello | +-----------+ ^ x --------+

Ahora echa un vistazo a esta línea:

 x = x.Replace('h','j');

Sucede lo siguiente:

  1. x.Replace crea una nueva cadena (con h reemplazada por j) y devuelve una referencia a esta nueva cadena.

     +-----------+ +------------+ y -> | hello | | jello | +-----------+ +------------+ ^ x --------+
  2. Con x = ... , asigna x a esta nueva referencia. y todavía hace referencia a la cadena anterior.

     +-----------+ +------------+ y -> | hello | | jello | +-----------+ +------------+ ^ x --------------------------+

Entonces , ¿ cómo se modifica una cadena en el lugar? tu no C# no admite la modificación de cadenas en el lugar. Las cadenas están diseñadas deliberadamente como una estructura de datos inmutable . Para una estructura de datos similar a una cadena mutable, use StringBuilder :

 var x = new System.Text.StringBuilder("hello"); var y = x; // note that we did *not* write x = ..., we modified the value in-place x.Replace('h','j'); // both print "jello" Console.WriteLine(x); Console.WriteLine(y);
over 4 years ago · Santiago Trujillo Report

0

Ya hay buenas respuestas aquí por qué sucede esto. Sin embargo, si desea que ambos impriman "gelatina", puede asignar x a y por referencia utilizando la palabra clave ref .

 string x = "hello"; ref string y = ref x; x = x.Replace('h', 'j'); Console.WriteLine(x); // gives "jello" output Console.WriteLine(y); // gives "jello" output

Más información sobre Ref locales aquí .

over 4 years ago · Santiago Trujillo Report

0

La cadena devuelta es una NUEVA referencia de cadena. Con respecto a string.Replace(), MSDN dice:

"Este método no modifica el valor de la instancia actual. En su lugar, devuelve una nueva cadena en la que todas las apariciones de oldValue se reemplazan por newValue"

https://docs.microsoft.com/en-us/dotnet/api/system.string.replace?view=net-5.0 .

Como mencionó @Heinzi, las cadenas son inmutables y la mayoría de las acciones realizadas en las cadenas dan como resultado nuevas cadenas:

"Los objetos de cadena son inmutables: no se pueden cambiar después de haberlos creado. Todos los métodos de cadena y los operadores de C# que parecen modificar una cadena en realidad devuelven los resultados en un nuevo objeto de cadena".

https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/strings/#:~:text=String%20objects%20are%20immutable%3A%20they,in%20a%20new%20string% 20objeto .

¡Salud!

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!