了解 C# 字符串行为和引用传递
C# 字符串尽管是引用类型,但在修改方面表现出独特的行为。 下面的代码说明了这一点:修改方法中的字符串不会更改原始字符串变量。
<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>
发生这种情况是因为,虽然字符串是引用类型,但该方法接收字符串引用的副本(按值传递)。 对此复制的参考所做的更改不会影响原始参考。 此外,C# 中的字符串是不可变的;你不能直接改变他们的性格。 相反,为字符串变量分配新值会创建一个新的字符串对象。
通过引用修改字符串
要修改原始字符串,请使用 ref
关键字:
<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>
使用ref
,该方法直接接收对原始字符串变量的引用。 在方法中分配新值会更新原始变量的引用。 这演示了真正的按引用传递行为。 请注意,即使使用 ref
,您仍然会创建一个新的字符串对象;引用只是被更新为指向这个新对象。
以上是为什么在 C# 方法中修改字符串不会改变原始字符串,如何修改?的详细内容。更多信息请关注PHP中文网其他相关文章!