经过一段时间的学习,查阅各种资料,询问高手,对于机房收费系统的代码编写渐入佳境,同时在遇到问题后也不再茫然失措,而是静下心来去找到问题的根源,进而找到解决的办法。
在使用泛型集合作为函数的返回值的实践中,遇到了一个很普遍的问题,那就是在将DataTable类型的返回结果转换为以实体类型为集合元素的泛型集合List的过程中,由于数据类型的转换导致的错误,具体如下图所示:
我们可以看到错误提示说的是Decimal类型的对象无法转换为Double类型,一开始我并知道这个问题的原因,点击“获取此异常的常规帮助”,可以看到下面的提示:
看了半天还是没能知道什么意思,于是就找用过泛型集合的人问了问是怎么个情况,人家说是在向实体类型转换的时候,由于数据类型不一致导致的,也没说到底在哪出了问题,我想既然是decimal无法转换为double类型,那么就不用double类型的属性,因此找到本次要转换的目标实体类型QueryBalanceEntity,查看里面各个属性的数据类型,发现只有属性Balance是double类型的,于是将其改成了decimal类型,然后从新编译,问题解决了,但是紧接着又发现了另一个异常,如下图:
返回结果中少了一个数据项,使用断点逐步调试,没能发现问题的根源,数据库中明明有数据,但是却显示不出来,在将返回结果传递到U层的过程中有一个将DataTable的换成List的步骤,因此我要看看班级的信息是否在Datatable中,所以在代码中加了一句输出DataTable中相应值的语句如下:
结果班级的信息的确是返回来了,但是没有显示出来,肯定是泛型集合的使用出了问题,因此就打开数据库进行查看,发现实体类型QueryBalanceEntity中的属性班级的名称是ClassName,而在数据库中字段名称是class,根本不一致,鉴于class在编程语言中是关键字,所以就把数据库的字段名称改成了classname,如下:
这样数据库中的字段和实体类中的属性名称对应起来,才可以顺利将Datatable类型的的数据结构转换为List类型的数据结构,方便使用。
对于泛型集合的使用,并没有过多的去研究,而是直接将转换函数拷贝过来,问清楚参数的意义和使用方法,即可在系统中使用,这是最快的学习方式,在使用中学习,而不是先研究半天理论,完了之后还是不知道怎么使用,但是在使用完了之后要回过头了去总结,这样才是真正的高效学习。