Csharp/C#教程:在数组中交换2个元素的function不起作用分享


在数组中交换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方法实际上只是操纵ab本地副本。 您需要通过引用传递参数。 所以你要定义这样的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[] arrref为前缀,主要用于教学目的:默认情况下,数组将由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); 

您正在按值传递参数ab
请参阅传递参考与传递值之间的区别是什么? 欲获得更多信息。

以下是解决问题的两种解决方案。

 //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

(0)
上一篇 2022年1月14日
下一篇 2022年1月14日

精彩推荐