数组:把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。
集合:集合是一组可变数量的数据项(可为0)的组合,这些数据项可能共享某些特征,需要以某种操作方式一起进行操作。
泛型:在程序编码中一些包含参数的类型,也就是说泛型的参数只可以代表类,不能代表个别对象。
开始用内存中的一个位置映射一个值,用“变量”来使用这个值。进一步发展成,用变量来引用一组值,数组诞生。后来有了集合,它是更强的的数组,依赖object类。存入集合要经历装箱,转换成Object类,拿出的时候再拆箱成之前的类型。在元素量大的时候,会导致性能下降。由于我们使用同一类型更方便操作,后来就产生了泛型,它可以把里面的元素转换成特定的类型,减少了拆装箱带来的困扰。
C#集合包含 |
名称 |
区别 |
System.Array |
数组 |
长度一定,不可增删改查 |
System.Collection |
非泛型集合 |
ArrayList可动态的调整大小,具有添加、移除的功能 包括ArrayList BitArray Hastable Queue Stack SortedList 。 所有的集合都要实现一个接口 IEnumerable |
System.Collection.Generic |
泛型集合 |
相当于免去转换成Object的集合。 提供了更高的类型安全和效率。 |
新生中WCF层中的一个小demo:
<span style="font-family:KaiTi_GB2312;font-size:18px;"> /// <summary> /// 根据学院查询这个学院的学生个数 /// </summary> /// <param name="freshDepartment">学院的实体,学院名称</param> /// <returns></returns> public List<FreshStudentReportContracts> QueryAllFreshReport() { //实例化学生报表实体类型的泛型集合 List<FreshStudentReportContracts> listStudentReport = new List<FreshStudentReportContracts>(); //实例化B层学生信息 FreshStudentEntityService en = new FreshStudentEntityService(); //通过调用B层的方法实现IList的接口 //创建一个基于IList的接口,List是创建一个List的实例 IList<ITOO.FreshService.Model.FreshStudentEntity> studentCollections = en.LoadEnities().ToList(); //定义B层查询专业信息的方法 FreshDepartmentEntiyService QueryAllDepartments = new FreshDepartmentEntiyService(); //调用B层的方法 var listDepartment = QueryAllDepartments.QueryDepartment(); //获得所有的学生实体 //定义一个宿舍实体FreshDep,从listDepartment中取实体属性进行赋值 foreach (FreshDepartmentEntiy FreshDep in listDepartment) { //定义数据契约 FreshStudentReportContracts fsrc = new FreshStudentReportContracts(); //把实体的值赋给数据契约 fsrc.DepartmentName = FreshDep.DepartmentName; //查询录取学生总人数 fsrc.EnterStudentNumber = studentCollections.Where(s => s.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count(); //查询报道学生总人数 fsrc.RegisterStudentNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count(); //查询报道男生总人数 fsrc.RegisterBoysNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.Sex == 0 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count(); //查询报道女生总人数 fsrc.RegisterGrilsNumber = studentCollections.Where(e => e.IsCheckIn == 1 && e.Sex == 1 && e.FreshDepartmentName == FreshDep.DepartmentName).ToList().Count(); //把数据契约值添加到学生报表数据契约中 listStudentReport.Add(fsrc); } return listStudentReport;//返回学生报表数据契约中的数据 }</span>
在这段代码中,首先定义了一个方法:根据学院查询这个学院的学生个数的方法——QueryAllFreshReport,把查询的结果放到List<FreshStudentReportContracts>这个泛型集合里面。这个泛型指定的类型是FreshStudentReportContracts.
在这个集合里面,可以添加该数据契约里面含有字段(DepartmentName,EnterStudentNuber等)对应的属性值.
之前做机房的时候,泛型集合里面存放的是实体。新生项目中,存放的不仅仅可以是model实体,也可以是数据契约实体,这也算是一种进步吧。
无论是变量、数组、集合、泛型都是一个容器,能盛放数据,只是“瓶口”不太一样。 从盛放一个数据,同种类型的多个数据,到不同种类的多个数据,容器的发展更加的人性化,人类面向对象的思想也在不断的提高。相信未来在学习Java的时候,对容器的理解会更加的深入。
原文地址:http://blog.csdn.net/wangmei4968/article/details/44134341