说说.NET中被我忽视的方法
.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.我这里只提供示例,关于上面提到方法的详细应用大家可以自行百度。
标签: .NET
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息