关于datatable和list传值的讨论

来源:互联网 发布:星光大道网络报名参加 编辑:程序博客网 时间:2024/05/17 23:50

       在重构机房收费系统的时候,用到了泛型集合来代替datatable的传值。但是,关于为什么要用这个泛型集合,一直以来我也没有弄明白。用的时候,也只是因为别的同学用了,而且米老师跟学长们说过了,要求传值的时候用泛型集合。直到昨天验收系统的时候,大家也谈到了这个问题,但是依然是没有一个明确的答案。

以下是本人结合前人的观点,发表一下自己的看法,如果有什么不正确的地方,欢迎大家踊跃拍砖!

1.  符合面向对象思想。

2.  实体类的属性是强类型,每个字段的类型都是已知的。

3.  操作灵活

编写B层的人员无需手动填写需要的字段,直接按一下点,全都提示出来了,想用哪个用哪个,不会出现写错的情况。另外,不必了解数据库结构。

4. 不用拆装箱。

关于拆装箱的概念,本人早在前面写过了,所以在此不再赘述,望读者自己体会!

5. 减少输入,传输时只需要传一个实例T就可以获取它的任何属性。

6. 正确地构建的泛型类可以真正减少代码中的安全性问题。

7. 使用泛型类还可以提高性能。

其中最大的一个改进是.NET框架组件不会在值类型上使用包装(boxing)。尽管泛型类可以使用多个数据类型工作,但是它在后台单独地处理每一种数据类型。这种技术确保了在你的工作量最小的情况下,应用程序提供最佳的性能。

8. List<T>是强类型化的,而DataTable不是。

一般的DataTable,访问某列时,是通过string的ColumnName来取得的,比如:string name = dt.Rows[i]["Name"].ToString();因为name是string的列名,存在记错写错的风险,且编译不检查,而List<T>,因为类型化的元素,编程时属性可以有IDE的智能感知来选择,编码更方便。不容易出错:
string name = list[0].Name;

9. LINQ(语言集成查询)的强有力支持,使得操作List<T>有前所未有的快感
    其实在LINQ出来之前,还是DataTable用的多,因为要想过滤数据,可以用
DataView,DataTable.Select()等方法。而List<T>只能是自己写循环,麻烦。
LINQ出来之后,where,join,group by,order by...等等操作,对于List<T>的查询真是很便利。

10.DataTable的结构远比List<T>要复杂,内存占用量更大。
    在有变化的场合下,DataTable里要维护不同RowState的数据(修改前的和现在的),还有Schema数据
List<T>就没有这些累赘,更轻快。


以上,部分观点属于个人观点,如果有更好的见解,还请不吝赐教!
0 0
原创粉丝点击