首页 >后端开发 >C++ >为什么在 C# 方法中修改字符串不会改变原始字符串,如何修改?

为什么在 C# 方法中修改字符串不会改变原始字符串,如何修改?

DDD
DDD原创
2025-01-24 07:01:09583浏览

Why Doesn't Modifying a String in a C# Method Change the Original String, and How Can I Make It?

了解 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn