我想写个函数来实现交换两个string的参数。如下:
using System;namespace Test
{

class Program
{
public static void swap(string str1,string str2)
{
//如何实现交换str1,str2
/////////////////////////////
}

public static void Main(string[] args)
{
string str1="aaa",str2="bbb";
Program.swap(str1,str2);
Console.WriteLine("{0}  {1}",str1,str2);

Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}
假设有swap(string,string)方法,如何实现交换两个参数的内容?
即,如何在swap中来修改引用类型所指向的在堆中的数据?
对于string,应该是按引用传递,但是这里传递过来的应该是实参引用的拷贝,要想达到实参内容交换的目的,
必须要在swap中区修改引用的内容,请问下如何实现?PS:最近在C++和C#中来回切换,头有点晕了,请大家帮帮忙。

解决方案 »

  1.   

    public static void swap(ref string str1,ref string str2)
    {
    string strTmp=str1;
    str1=str2;
    str2=strTmp;
    }
      

  2.   

    哦,1楼对的...只能加ref或用unsafe代码...
      

  3.   

    中间变量
    string temp=string.empty;
      

  4.   

    同意1楼, 这样调用:
    Program.swap(ref str1, ref str2);
      

  5.   

    string类型有其恒定性用个中间变量交换就行了,不用ref,本来就是引用类型,直接指向的就是一个堆中的地址。如果你修改了字符串,要看你的是如何修改的。。也许会新建一个字符串,也许会在hash表中找到相同的字符串,然后把这个引用添加到这个字符串的引用集合中