.net二维数组长度误用分析

简介:     也许有些工程师在实际开发中偶尔也会和我一样不小心犯下面的问题。这里拿出来与大家共勉。 1、数组长度误用案例现场, class Program {     static in...

    也许有些工程师在实际开发中偶尔也会和我一样不小心犯下面的问题。这里拿出来与大家共勉。

1、数组长度误用案例现场,


  1. class Program
  2. {
  3.     static int[,] gTwoDelArray = new int[,]{
  4.     { 1, 2 }, { 1, 3 }, { 1, 4 }, { 1, 5 }, { 1, 6 }, { 1, 7 }, { 1, 8 }, { 1, 9}, { 1, 10 }, {1,11},
  5.     { 1, 12 }, { 1, 13 }, { 1, 14 }, { 1, 15 }, { 1, 16 }, { 1, 17 }, { 1, 18 }, { 1, 19}, { 1, 20 }, {1,21},
  6.     { 1, 22 }, { 1, 23 }, { 1, 24 }, { 1, 25 }, { 1, 26 }, { 1, 27 }, { 1, 28 }, { 1, 33}, { 1, 34 }, {1,35},
  7.     { 1, 36 }, { 1, 37 }, { 1, 38 }, { 1, 39 }, { 1, 40 }, { 1, 41 }, { 1, 42 }, { 1, 43}, { 1, 44 }, {1,45},
  8.     { 1, 46 }, { 1, 47 }, { 1, 48 }, { 1, 49 }, { 1, 50 }, { 1, 51 }, { 1, 52 }, { 1, 53}, { 1, 54 }, {1,55},
  9.     { 1, 56 }, { 1, 57 }, { 1, 58 }, { 1, 59 }, { 1, 60 }, { 1, 61 }, { 1, 62 }, { 1, 63}, { 1, 66 }, {1,67},
  10.     { 1, 68 }, { 1, 69 }, { 1, 70 }, { 1, 71 }, { 1, 72 }, { 1, 73 }, { 1, 74 }, { 1, 75}, { 1, 76 }, {1,77},
  11.     { 1, 78 }, { 1, 79 }, { 1, 80 }, { 1, 81 }, { 1, 82 }, { 1, 83 }, { 1, 84 }, { 1, 85}, { 1, 86 }, {1,87},
  12.     { 1, 88 }, { 1, 89 }, { 1, 90 }, { 1, 94 }, { 1, 98 }, { 1, 99 }, { 1, 100 }, { 1, 101}, { 1, 102 }, {1,103},
  13.     { 1, 104 }, { 1, 105 }, { 1, 106 }, { 1, 107 }, { 1, 108 }, { 1, 109 }, { 1, 110 }, { 1, 111}, { 1, 112 }, {1,113},
  14.     { 1, 114 }, { 1, 115 }, { 1, 116 }, { 1, 117 }, { 1, 118 }, { 1, 119 }, { 1, 120 }, { 1, 121}, { 1, 122 }, {1,123},
  15.     { 1, 124 }, { 1, 125 }, { 1, 126 }, { 1, 127 }, { 1, 128 }
  16. };

  17.     static void Main(string[] args)
  18.     {
  19.         try
  20.         {
  21.             int modeVal = 0;
  22.             for (modeVal = 0; modeVal gTwoDelArray.Length; )
  23.             {
  24.                 Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
  25.                 modeVal = (++modeVal) % gTwoDelArray.Length;
  26.             }
  27.             Console.ReadLine();
  28.         }
  29.         catch (Exception main)
  30.         {
  31.             Console.WriteLine(main.ToString());
  32.             Console.ReadLine();
  33.         }
  34.     }
  35. }


 

2、问题分析

    这段代码本意上是想实现将不断循环输入二维数组的第二维的数据。

    但上面的代码存在一个致命的问题,导致运行过程中报错,问题到底出在哪里?

image 图1

 

    调试分析,发现一个致命的基础性问题,请看图2.

image图2

    由图2,很明显是对二维数组的长度的错误理解引起的。由此案例与诸位共勉:.net中多维数组的长度,是以单个元素的个数总和计算的。下面再设计一个三维数组印证这个问题(注意.NET的三维数组的定义方法,同时要注意C语言的二维数组与.NET的二维数组写法的区别)。

image 图3

 

 

3、修改方案


  1. static void Main(string[] args)
  2. {
  3.     try
  4.     {
  5.         int modeVal = 0;
  6.         for (modeVal = 0; modeVal gTwoDelArray.Length/2; )
  7.         {
  8.             System.Threading.Thread.Sleep(100);
  9.             Console.WriteLine("value {0} = {1}", modeVal, gTwoDelArray[modeVal, 1]); // gTwoDelArray[i][1] --- C 的写法
  10.             modeVal = (++modeVal) % (gTwoDelArray.Length/2);
  11.         }
  12.         Console.ReadLine();
  13.     }
  14.     catch (Exception main)
  15.     {
  16.         Console.WriteLine(main.ToString());
  17.         Console.ReadLine();
  18.     }
  19. }


 

image 图3




 

    开发者,需要时刻保持平静的心态。戒骄戒躁,宁静才能致远!

相关文章
|
安全 数据安全/隐私保护 开发者
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
三款.NET 代码混淆工具比较分析:ConfuserEx、Obfuscar 和 Ipa Guard
|
存储 运维
使用Visual Studio分析.NET Dump
使用Visual Studio分析.NET Dump
208 0
|
11月前
|
开发框架 监控 .NET
【Azure App Service】部署在App Service上的.NET应用内存消耗不能超过2GB的情况分析
x64 dotnet runtime is not installed on the app service by default. Since we had the app service running in x64, it was proxying the request to a 32 bit dotnet process which was throwing an OutOfMemoryException with requests >100MB. It worked on the IaaS servers because we had the x64 runtime install
174 5
|
11月前
Visual Studio 快速分析 .NET Dump 文件
【11月更文挑战第10天】.NET Dump 文件是在 .NET 应用程序崩溃或出现问题时生成的,记录了应用程序的状态,包括内存对象、线程栈和模块信息。通过分析这些文件,开发人员可以定位和解决内存泄漏、死锁等问题。在 Visual Studio 中,可以通过调试工具、内存分析工具和符号加载等功能来详细分析 Dump 文件。此外,还可以使用第三方工具如 WinDbg 进行更深入的分析。
549 1
|
存储 运维
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
.NET开发必备技巧:使用Visual Studio分析.NET Dump,快速查找程序内存泄漏问题!
251 2
|
开发框架 缓存 .NET
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
【App Service】在Azure App Service中分析.NET应用程序的性能的好帮手(Review Stack Traces)
110 0
|
jenkins 关系型数据库 MySQL
一文搞定SonarQube接入C#(.NET)代码质量分析
一文搞定SonarQube接入C#(.NET)代码质量分析
2119 0
一文搞定SonarQube接入C#(.NET)代码质量分析
|
存储 测试技术 计算机视觉
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
高维数据惩罚回归方法:主成分回归PCR、岭回归、lasso、弹性网络elastic net分析基因数据
|
数据可视化 大数据 物联网
国内首款基于.NET Core平台的大数据可视化分析工具平台
NBI一站式自服务大数据可视化分析平台是一款基于.NET Core开发的自助式可视化分析大屏展示平台,可以通过平台零代码或低代码方式构建各类数据展示分析; NBI一站式自服务大数据可视化分析平台提供了多种灵活的部署方式,支持安装包模式安装、手动安装、docker镜像安装 NBI一站式自服务大数据可视化分析平台跨平台性:支持部署在Windows、Linux、MacOS等操作系统上运行
国内首款基于.NET Core平台的大数据可视化分析工具平台
|
存储 开发框架 JSON
一套标准的ASP.NET Core容器化应用日志收集分析方案
本文记录一套标准的、无侵入的的容器化应用日志收集方案:
一套标准的ASP.NET Core容器化应用日志收集分析方案

热门文章

最新文章