好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

说说.NET中被我忽视的方法

说说.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://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于说说.NET中被我忽视的方法的详细内容...

  阅读:52次