在数组中交换2个元素的function不起作用
我是C#的新手,我无法理解为什么这段代码不起作用。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { char[] sw = "ab".ToCharArray(); swap(sw[0], sw[1]); string end = new string(sw); Console.Write(end); } static void swap(char a, char b) { char temp = a; a = b; b = temp; } } }
我在控制台上的期望是“ba”,但我得到“ab”。 我能够找到解决这个问题的不同方法,但我想知道的是这段代码中的错误是什么。 谢谢您的帮助!
问题是swap
方法实际上只是操纵a
和b
本地副本。 您需要通过引用传递参数。 所以你要定义这样的swap
方法:
static void swap(ref char a, ref char b) { char temp = a; a = b; b = temp; }
并称之为:
swap(ref sw[0], ref sw[1]);
它应该像下面这样进行修改(注意:在这个例子中, ref char[] arr
以ref
为前缀,主要用于教学目的:默认情况下,数组将由ref
传递)
namespace ConsoleApplication1 { class Program { static void Main(string[] args) { char[] sw = "ab".ToCharArray(); swap(0, 1, ref sw ); string end = new string(sw); Console.Write(end); } static void swap(int indexA, int indexB, ref char[] arr) { char temp = arr[indexA]; arr[indexA] = arr[indexB]; arr[indexB] =temp; } } }
您的交换采用两种值类型并在变量之间交换值。 那里没有什么可以修改原始数组。 您需要将swap方法修改为:
static void Swap(char[] array, int a, int b) { char temp = array[a]; array[a] = array[b]; array[b] = temp; }
然后你可以从Main()调用它,如:
Swap(array, 0, 1);
您正在按值传递参数a
和b
。
请参阅传递参考与传递值之间的区别是什么? 欲获得更多信息。
以下是解决问题的两种解决方案。
//Pass by value and return the values static Tuple swap2(char a, char b) { char temp = a; a = b; b = temp; return new Tuple(a, b); } //Pass by reference static void swap3(ref char a, ref char b) { char temp = a; a = b; b = temp; } public static void Main(string[] args) { char[] sw2 = "ab".ToCharArray(); var chars2 = swap2(sw2[0], sw2[1]); sw2[0] = chars2.Item1; sw2[1] = chars2.Item2; //Will print "ba" Console.WriteLine(sw2); char[] sw3 = "ab".ToCharArray(); swap3(ref sw3[0], ref sw3[1]); //Will print "ba" Console.WriteLine(sw3); }
这是一个关于您是否应该使用或尝试避免ref关键字的问题。 除了最简单的用途之外,通常建议尽可能避免引用。 交换属于“最简单的用途”类别,但我建议您在大多数实际情况下尽量避免使用ref。
什么时候使用C#ref关键字一个好主意?
上述就是C#学习教程:在数组中交换2个元素的function不起作用分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1031828.html