关于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>就没有这些累赘,更轻快。
以上,部分观点属于个人观点,如果有更好的见解,还请不吝赐教!
- 关于datatable和list传值的讨论
- datatable和list的遍历
- [python]关于list的append的讨论
- 关于Java传值和传址的一些讨论
- DataTable 和List之间的转换
- list和datatable的相互转化
- 完整的DataTable和list转换
- datatable和list互换
- List和DataTable
- DataTable和list转换
- C++中关于左值和右值的讨论
- 关于JSF和Struts的讨论1
- 关于JSF和Struts的讨论2
- 关于JSF和Struts的讨论
- 关于JSF和Struts的讨论
- 关于椎和栈的讨论
- 关于service和component的讨论
- 关于Debug和Release的讨论
- U盘安装WIN7
- Cocos2d-x 类COC手游与RTS(即时战略)游戏的编程实践总结
- 利用linux traffic control 作局域网中网速控制
- [poj 1144]割项模板
- fork
- 关于datatable和list传值的讨论
- Codeforces Round #272 (Div. 2) B. Dreamoon and WiFi (超几何分布)
- BZOJ 2097 Exercise 奶牛健美操 二分答案+树形DP+贪心
- Java和mysql的数据类型对应
- scipy: 科学计算
- 通过 PowerShell 支持 Azure Traffic Manager 外部端点和权重轮询机制
- (转)安装mysql,在./configure时出现错误:error: No curses/termcap library found的解决办法
- 工作中git 操作汇总
- cocos2dx 3.0以上版本的触摸事件