1. 苏葳的备忘录首页
  2. 编程

C#中多维数组和交错数组及params参数

c# 数组 交错C#中可定义多维数组。int [,,]形式的是三维的多维数组,而int [][][]形式的是交错数组。有分析认为实际上每维元素不固定的交错数组反而比规则的多维数组性能更好(快40%)。由于数组以地址形式传入,因此可用于参数回传,并且可有ref或out修饰(未试过)。而对于param int[] parm形式的可变参数来说,其只能为一维,且只能用于参数表中最后位置。不能加ref或out等修饰符。

兴冲冲的写了个func(parms int [] kk)的方法,结果以func(var1,var2,var3)形式调用时根本不能回传参数值。那么错在哪里呢?定义个多维数组:

int []kk=new int[]{1,2,3,4};

若以func(kk)方式调用,在func中改变kk[0]的值时,返回后kk[0]值也跟着改变。

然后若以func(kk[0],kk[1],kk[2])形式调用,则打印出来的kk[0]值还是初始化时的值,这就是当时自己犯错的地方。显然func(kk)是传入了地址,而func(kk[0],kk[1])还是以值方式传递的。

那么能否象C/C++中一样,用&kk[0]来取得首地址呢,如func(&kk[0])?试验结果是不行,string*和string[]显然在C#中是无法任意转换的。而指针操作也只能在非托管代码中使用。

若是用ref/out kk[0]形式调用func方法如何呢?也不行,因为ref/out在声明和调用时都要使用。而parms和ref/out是互斥的。因而方法声明时不能同时使用parms和ref/out。

看来还是只能用数组形式返回多个参数了。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/187.html

发表评论

邮箱地址不会被公开。 必填项已用*标注