zoukankan      html  css  js  c++  java
  • 说说.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.我这里只提供示例,关于上面提到方法的详细应用大家可以自行百度。

  • 相关阅读:
    前端和后端的区别和分工
    IntelliJ和tomcat中的目录结构
    JAVA开发环境和IntelliJ工具安装
    Linux下Python+Selenium自动化模拟用户登录(备注:记录一次强行卸载rpm依赖包,引发的rpm、yum等命令异常,无法远程xftp工具)
    Docker 操作命令梳理(镜像下载、容器创建、Dockerfile)
    Centos 6.6 Docker安装(内网坏境)
    C# 连接Access2010 数据库之初探
    C#使用NLog记录日志
    现实两种
    C#中的两把双刃剑:抽象类和接口
  • 原文地址:https://www.cnblogs.com/kingboy2008/p/2857491.html
Copyright © 2011-2022 走看看