为什么我需要通过引用交换函数来传递字符串?

Raj*_*aja 3 .net c# string value-type reference-type

在C#中,string是引用类型.然后,

为什么我需要让我的交换函数具有ref参数?

swap(ref string first, ref string second) //swap(string first, string second) doesn't work
{
     temp = first;
     first = second
     second = temp;
}
Run Code Online (Sandbox Code Playgroud)

Eri*_*ert 7

你混淆了两种不同的引用.字符串是对实例的引用.您的交换函数接受变量的引用.

这样想吧.你有两本书,"圣诞颂歌"和"匹克威克论文".他们是书; 他们有页面和文字等等.

你有十张纸.五说"圣诞颂歌".五说"匹克威克论文".这些论文是书籍的参考.他们不是书.

你有十个标有A,B,C,D,E,F,G,H,I,J的抽屉.你把"A Christmas Carol"的文件放入抽屉A到E,以及那些写着"Pickwick Papers"的文章. "进入抽屉F到J.

现在你要交换抽屉E和I的内容.你需要给交换器什么信息?你不能告诉交换器"交换参考圣诞颂歌的Pickwick论文",因为这将改变所有十个抽屉,而不仅仅是E和I.您必须给交换器的信息是"E"和"I".你必须传递两个变量的引用; 变量本身包含对书籍的引用这一事实无关紧要.

你的交换器有三个自己的抽屉,标记为first,second和temp.它需要两张纸.一个人说"E",那个标有"第一个"的抽屉里面.一个人说"我",那个标签为"第二个"的抽屉里面.

交换器在"第一个"中查找,并找到一个说"E"的文件.它看起来是"E"并找到一篇说"圣诞颂歌"的论文.它制作了那张纸的复印件并将副本放在"临时"中......你知道这是怎样的,我希望如此.