Understanding C# String Behavior and Reference Passing
C# strings, despite being reference types, exhibit unique behavior regarding modification. The following code illustrates this: modifying a string within a method doesn't change the original string variable.
<code class="language-csharp">class Test { public static void Main() { string test = "before modification"; Console.WriteLine(test); ModifyString(test); Console.WriteLine(test); // Still "before modification" } public static void ModifyString(string test) { test = "after modification"; } }</code>
This happens because, although strings are reference types, the method receives a copy of the string's reference (pass-by-value). Changes made to this copied reference don't affect the original. Furthermore, strings in C# are immutable; you can't directly alter their characters. Instead, assigning a new value to a string variable creates a new string object.
Modifying Strings by Reference
To modify the original string, use the ref
keyword:
<code class="language-csharp">class Test { public static void Main() { string test = "before modification"; Console.WriteLine(test); ModifyString(ref test); Console.WriteLine(test); // Now "after modification" } public static void ModifyString(ref string test) { test = "after modification"; } }</code>
Using ref
, the method directly receives a reference to the original string variable. Assigning a new value within the method updates the original variable's reference. This demonstrates true pass-by-reference behavior. Note that even with ref
, you're still creating a new string object; the reference is simply being updated to point to this new object.
The above is the detailed content of Why Doesn't Modifying a String in a C# Method Change the Original String, and How Can I Make It?. For more information, please follow other related articles on the PHP Chinese website!