栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

多维数组和C#中的数组数组有什么区别?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多维数组和C#中的数组数组有什么区别?

数组数组(锯齿状数组)比多维数组更快,并且可以更有效地使用。多维数组具有更好的语法。

如果您使用锯齿形和多维数组编写一些简单的代码,然后使用IL反汇编程序检查编译后的程序集,您会发现从锯齿形(或一维)数组进行存储和检索是简单的IL指令,而多维数组的相同操作是方法调用总是比较慢。

请考虑以下方法:

static void SetElementAt(int[][] array, int i, int j, int value){    array[i][j] = value;}static void SetElementAt(int[,] array, int i, int j, int value){    array[i, j] = value;}

他们的IL如下:

.method private hidebysig static void  SetElementAt(int32[][] 'array',        int32 i,        int32 j,        int32 'value') cil managed{  // Code size       7 (0x7)  .maxstack  8  IL_0000:  ldarg.0  IL_0001:  ldarg.1  IL_0002:  ldelem.ref  IL_0003:  ldarg.2  IL_0004:  ldarg.3  IL_0005:  stelem.i4  IL_0006:  ret} // end of method Program::SetElementAt.method private hidebysig static void  SetElementAt(int32[0...,0...] 'array',        int32 i,        int32 j,        int32 'value') cil managed{  // Code size       10 (0xa)  .maxstack  8  IL_0000:  ldarg.0  IL_0001:  ldarg.1  IL_0002:  ldarg.2  IL_0003:  ldarg.3  IL_0004:  call       instance void int32[0...,0...]::Set(int32,    int32,    int32)  IL_0009:  ret} // end of method Program::SetElementAt

使用锯齿状数组时,您可以轻松执行诸如行交换和行调整大小之类的操作。也许在某些情况下使用多维数组会更安全,但是即使Microsoft
FxCop告诉您,在使用锯齿状数组分析项目时也应使用锯齿状数组,而不是多维数组。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/465606.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号