电子课件本章常见错误.pptx

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

本章常见错误本讲大纲:1、使用for删除集合中元素时的错误支持网站:2、C#数组和C++数组混淆的问题3、遍历ArrayList数组时可能存在的错误

使用for删除集合中元素时的错误(1)在应用for语句时要注意,该语句内部的局部自增或自减变量如果处理不当,可能给程序带来巨大隐患。比如在使用for语句删除集合中的元素时,就可能出现下面的情况。staticvoidMain(string[]args){ListstringtempList=newListstring();tempList.Add(A);tempList.Add(B);tempList.Add(C);for(inti=0;itempList.Count;i++){tempList.RemoveAt(i);} if(tempList.Count0){Console.Write(\n剩余元素的个数为+tempList.Count+,具体元素有:);foreach(stringitemintempList){Console.Write(item+);}}else{Console.WriteLine(已删除所有的元素!);}Console.Read();}上面代码的目的是使用for语句删除集合中的所有元素,但运行结果却出人意料,程序运行结果如图所示。

使用for删除集合中元素时的错误(2)从执行结果中,可以得出这样的结论,集合中的元素B在for循环中并未执行RemoveAt方法,那么接下来添加对B元素的快速监视,如图所示,从图中看到,B元素的索引值为1,这说明在使用for语句删除集合元素的过程中发生了跳跃,并没有按照元素在集合中的原始顺序逐个删除。进一步分析发现,每当删除一个元素时,集合的Count属性值都会减小1,这将直接导致集合中元素的索引重新排序,进一步说,就是剩余所有元素的索引值都减小1,正如图所示的那样。而for语句的局部变量i仍然在递增,这必将导致删除操作发生跳跃,这就是问题的根源所在。从上面的分析可知,删除集合中的元素会导致剩余元素的索引重排序,但在完全删除元素之前,索引值为0的元素一直存在,这就是解决问题的一个着手点。解决问题的办法可这样考虑,在RemoveAt方法执行后,使局部变量i的值减少1,从而始终保持i的值为0,这样每次循环都删除索引值为0的元素,最终实现删除集合中的所有元素。改正后的主要代码如下:for(inti=0;itempList.Count;i++){tempList.RemoveAt(i); //始终删除索引值为0的元素i-=1;//局部变量i的值减去1}

C#数组和C++数组混淆的问题C#中的数组声明语法和C++中的基本相同,例如,声明一个包含3个元素的整型数组,代码如下:int[]ints={0,1,2};由于C#和C++在数组声明语法上基本相同的特点,所以有些人认为这二者之间没有区别。但C#中的数组和C++中的数组是有很大区别的,C#中所有数据都以类型的方式表示,数组也不例外,存储不同类型元素的数组本身也是一个类型,在C#中所有的数组类型都继承自System.Array,该类型直接继承自System.Object并实现了多个接口,由于所有直接或间接继承自System.ValueType的类型才属于值类型,所以C#中的数组是引用类型,而C++中的数组是值类型,所以两者在存储数据时是有区别的。

遍历ArrayList数组时可能存在的错误(1)在ArrayList类中有一个重要的方法Add,该方法用于向集合中添加项,它有一个object类型的参数,这表示可以通过该方法向集合中添加任意类型的项。由于ArrayList动态数组中的元素类型可以多样化,当使用foreach语句遍历ArrayList数组时,会给程序带来潜在的隐患。例如,使用Add方法向ArrayList集合中添加不同类型的数据,然后使用foreach循环输出,代码如下:staticvoidMain(string[]args){ArrayListal=GetArrayList();foreach(intiteminal){Console.WriteLine(ite

文档评论(0)

183****7931 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档