嘿,原来不认识你,想不到你这么好用—说说.NET中被我忽视的方法
来源:互联网 发布:精灵王座网络公映 编辑:程序博客网 时间:2024/05/02 09:17
.NET中有些方法以前没有接触过,但用过了之后让人眼前一亮,哇,原来你这么好用。
下面就说说被我忽视过的方法。当然,每个人的编程经历,涉猎面及对.NET的认知程度都不一样。所以,这只是一家之言,肯定有很多不足之处,欢迎大家批评指正。
1. ADO.NET类
DataTable.Merge()
如何合并两张表?自己以前写的方法:
private void UniteTable(DataTable sourceTable, DataTable targetTable) { foreach (DataRow row in sourceTable.Rows) { DataRow newRow = targetTable.NewRow(); //将sourceTable中row的值赋给对应的targetTable中的row newRow["column1"] = row["column1"]; //... targetTable.Rows.Add(newRow); } }
哎,这个方法很傻很天真吧,其实DataTable中早就提供了合并两张表的方法,就是DataTable.Merge()。合并两张表,只要一条语句就行:
targetTable.Merge(sourceTable);
DataRow.ItemArray
结构相同的情况下,如何将一行的值赋给另一行?自己以前都这样写:
DataRow row1 = table1.Rows[0]; DataRow row2 = table2.Rows[0]; row1["column1"] = row2["column1"]; row1["column2"] = row2["column2"]; //...
老天,要是有30多个列我可怎么办。其实DataRow有个ItemArray属性,只要一句话就完成了:
row1.ItemArray = row2.ItemArray;
SqlCommand.Parameters.AddWithValue()
SqlCommand执行存储过程的时候怎么增加参数,类似这样做就可以了:
//设置参数名和类型 cmd.Parameters.Add("@Target", SqlDbType.NChar); cmd.Parameters.Add("@Description", SqlDbType.NChar); cmd.Parameters.Add("@Actor", SqlDbType.NChar); //给参数赋值 cmd.Parameters[0].Value = "ATarget"; cmd.Parameters[1].Value = "Description"; cmd.Parameters[2].Value = "Actor";
上面都分了两步,增加参数,然后再给参数赋值,其实我们可以一步到位的:
cmd.Parameters.AddWithValue("@Actor", "Actor"); cmd.Parameters.AddWithValue("@Target", "Target"); cmd.Parameters.AddWithValue("@Description", "Description");
2. 集合类
List.AddRange()
怎么在List中怎样添加多个值,曾经的我是这样子的:
List<int> list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); list.Add(4);
其实完全可以用一个方法就搞写,它就是AddRange().(在很多类中都有AddRange(),这里我只是用LIST来举例)
list.AddRange(new int[] { 1,2,3,4});
List.Find()与List.FindAll()
在List中查找特定值?以前我都是这样做:
foreach (int i in list) { if (i == 3) { Console.Write(i); } }
其实完全可以不用foreach循环,用Find()就可以很好的解决:(FindAll()与Find()用法相似)
int result = list.Find(delegate(int i) { return i == 3; });
3 控件类
DataGridView.HitTest()
DataGridView中如何获取当前鼠标位置所在的行数与列数?我认为DataGridView会有这样的方法,但找了很久都没找到。终于工夫不负有心人,在VS智能提示下点点终于找到了。只怪这坑爹的命名HitTest?为毛不是Get,Find,Index之类开头啊。返回值还是一个内部类:DataGridView.HitTestInfo
//捕获鼠标点击区域的信息 DataGridView.HitTestInfo hitTestInfo= this.sourceGrid.HitTest(e.X, e.Y); //获取所在行数 int rowIndex = hitTestInfo.RowIndex; //获取所在列数 int columnIndex = hitTestInfo.ColumnIndex;
ListBox.IndexFromPoint()
同样的,ListBox也有一个根据Point来获取行数的方法,即IndexFromPoint().你看,这个命名好多了:
// Get the index of the item the mouse is below. indexOfItemUnderMouseToDrag = ListDragSource.IndexFromPoint(e.X, e.Y);
4.其它
进制转换.
以前做进制转换,比如十六进制转八进制,还自己写过一个独立的方法。坑爹的,其实远不用这么麻烦,Convert.ToInt32()与string.Format()都有提供重载方法来实现:
//将十六进制“10”转换为十进制i int i = Convert.ToInt32("10", 16); //将十进制i转换为十六进制s string s = string.Format("{0:X}", i);
PS.我这里只提供示例,关于上面提到方法的详细应用大家可以自行百度。
摘自:http://www.cnblogs.com/Gyoung/archive/2012/05/08/2489585.html
- 嘿,原来不认识你,想不到你这么好用—说说.NET中被我忽视的方法
- 说说.NET中被我忽视的方法
- 说说.NET中被我忽视的方法
- 说说.NET中忽视的方法
- PowerBuilder总结——原来你是这么的简单
- PowerBuilder总结——原来你是这么的简单
- .Net中被忽视的方法
- 原来你那么好。。。
- Java中被你忽视的四种引用
- ListView原来这么好用
- 你说不爱的时候,我在疼。原来不是我不够好,而是你不想爱。
- 这么多年不容易...我很庆幸等到现在的你——知乎上关于男人成熟的好故事
- 【Leetcode】Sort List in java,你绝对想不到我是怎么做的^^我写完过了我自己都觉得好jian~
- 『你不知道的位运算,原来还可以这么用』
- 原来我这么的较真
- Android工具:被你忽视的Lint
- 你绝对想不到的程序输出结果
- 你绝对想不到的有趣Linux命令
- myeclipse + tomcat 修改jsp文件要重启eclipse生效
- linux发展历程
- 关于hibernate中如何实现limit查询,就要考测试了,我还在调代码
- Android系统编译过程中常见问题汇总(1)
- shell 之 sed命令
- 嘿,原来不认识你,想不到你这么好用—说说.NET中被我忽视的方法
- 【2012百度之星资格赛】A:百度计算器的加法
- LINUX core dump详解 & GDB调试
- mysql分页sql基本原理
- 《每天工作4小时的程序员》 一个老外的意淫文章,不过可以用来参考
- (6) Spring 如何装配 集合类 以及 【第二种 依赖注入 方式】使用 构造器 注入
- 叫你快速阅读
- Java读取文件方法大全
- USACO 1.4.2 The Clocks(DFS)