当前位置: 首页 > 编程语言 > C#

交换数组中2个元素的函数不起作用分享

时间:2023-04-11 01:18:18 C#

交换数组中2个元素的函数不起作用我是C#新手,我不明白为什么这段代码不起作用工作。使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){char[]sw="ab".ToCharArray();交换(sw[0],sw[1]);字符串结束=新字符串(sw);控制台。写(结束);}staticvoidswap(chara,charb){chartemp=a;一=b;b=温度;我在控制台上的期望是“ba”,但我得到的是“ab”。我能够找到不同的方法来解决这个问题,但我想知道这段代码有什么问题。感谢您的帮助!问题在于swap方法实际上只是在操作a和b的本地副本。您需要通过引用传递参数。所以你这样定义交换方法:staticvoidswap(refchara,refcharb){chartemp=a;一=b;b=温度;}并调用它:swap(refsw[0],refsw[1]);应该像下面这样修改(注意:在这个例子中refchar[]arr以ref为前缀,主要用于教育目的:默认情况下数组将由ref传递)namespaceConsoleApplication1{classProgram{staticvoidMain(string[]args){char[]sw="ab".ToCharArray();交换(0,1,参考sw);字符串结束=新字符串(sw);控制台.Write(结束);}staticvoidswap(intindexA,intindexB,refchar[]arr){chartemp=arr[indexA];arr[indexA]=arr[indexB];arr[indexB]=温度;}}}你的swap取两个值类型,在变量之间交换值。没有什么可以修改原始数组。您需要将交换方法修改为:staticvoidSwap(char[]array,inta,intb){chartemp=array[a];数组[a]=数组[b];数组[b]=温度;然后你可以从Main()调用它,比如:Swap(array,0,1);您正在按值传递参数a和b。请参阅按引用传递和按值传递之间的区别是什么?了解更多信息。以下是解决问题的两种解决方案。//按值传递并返回值staticTupleswap2(chara,charb){chartemp=a;一=b;b=温度;返回新元组(a,b);}//通过引用传递staticvoidswap3(refchara,refcharb){chartemp=a;一=b;b=温度;}publicstaticvoidMain(string[]args){char[]sw2="ab".ToCharArray();varchars2=swap2(sw2[0],sw2[1]);sw2[0]=chars2.Item1;sw2[1]=chars2.Item2;//将打印“ba”Console.WriteLine(sw2);char[]sw3="ab".ToCharArray();swap3(参考sw3[0],参考sw3[1]);//将打印“ba”Console.WriteLine(sw3);这是一个关于你是否应该使用或尝试使用ref关键字避免问题的问题。除了最简单的用法,一般建议尽可能避免引用。交换属于“最容易使用”的范畴,但我建议您在大多数实际情况下尽量避免使用ref。什么时候使用C#ref关键字是个好主意?以上是C#学习教程:交换数组中2个元素的函数不起作用。分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权请点击维权联系管理员删除。如需转载请注明出处: