在字符串上使用Replace时传递ref不工作

时间:2015-09-20 22:56:54

标签: c#

我刚刚开始学习C#,我正在努力了解如何使用ref和out。 我试图构建我能想到的最简单的函数,但是我遇到了错误,我无法理解为什么。

namespace cscheck
{
   class Program
   {
     static void Main(string[] args)
     {
        string check = "Check noob wallak";
        Console.WriteLine(check);
        swap(ref check, "noob", "boon");
        Console.WriteLine(check);
     }

     static void swap(ref string origin ,string x,  string y)
     {
       origin.Replace(x, y);
     }
   }
} 

但我得到的结果是:

  

检查noob wallak

     

检查noob wallak

据我所知,x和y是通过引用传递的值传递的值,但是替换没有被删除,我可以理解为什么。

3 个答案:

答案 0 :(得分:3)

因为Replace没有变异,所以会创建一个新字符串。尝试:

origin = origin.Replace(x, y);

答案 1 :(得分:2)

Replace()返回一个字符串。您必须将其用作结果:

origin = origin.Replace(x, y);

答案 2 :(得分:1)

.Replace返回一个新字符串,它不会修改原始字符串。字符串是不可变的。