调用函数后为什么字符串值保持不变

这个问题在这里已经有了答案:

  • 在C#7答案中通过引用或值传递对象

  • 因为您要更改传入的参数的值,而不是原始值。

    即当你传入时, str变成x一个副本。更改这对x存储的值没有影响。

    编辑:好吧,这是一个过于简单的解释,但正如指出的,更好的解释已经可用。 蒂姆的权利,字符串是不可变的,所以你不能改变存储在该引用中的字符串的内容,你只能用新的字符串替换它,但除非你明确指定参数为'ref',否则不能改变方法内的引用。


    这不仅仅是字符串,你也不能将对象改变成新的对象,也就是说,这不起作用:

    static void Change(ClassA aObj) 
    {
        aObj = new ClassA(); // Won't hold when you leave the function
    }
    

    原因是您正在通过值来传递这些参数的参考。 这意味着你可以看到和弄乱那里的东西,但你不能改变它指向内存中的新参考插槽。

    为了解决这个问题,你需要使用ref / out关键字。

    有关更详细的解释,请阅读。


    尝试传递关键字ref的字符串:

    static void Change(ref string str)
    {
        str = "Test";
    }
    
    链接地址: http://www.djcxy.com/p/21011.html

    上一篇: Why string value remains unchanged after calling function

    下一篇: Is really argument passing by value?