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

时间: 2024-10-31 12:40:57

说说.NET中被我忽视的方法的相关文章

在C#中如何使用资源的方法

总结一个在C#中如何使用资源的方法:一:使用本地文件1.将本地要加入的资源文本(视频,图片,文本或其它)加入项目,比如我们现在加入一个up.bmp的图片到项目中,且放在文件夹Resources下面,2.将up.bmp的生成操作设置为"嵌入的资源"3.读取资源:Assembly assembly = Assembly.GetEntryAssembly(); //不知为什么,上面的有时候不行,可以这样写: Assembly assembly = this.GetType().Assembl

Office word 2013中直接调用MathType的方法

Office word 2013中直接调用MathType的方法 | 浏览:4403 | 更新:2014-02-20 14:45 | 标签: word 使用Office word 2013的用户肯定早已注意到在编辑文档时MathType无法直接调用,但是点击文档中的公式时能够跳出MathType的公式编辑窗口.其实,这一问题可以通过简单设置让 MathType 集成到Office Word 2013中. 工具/原料 Office word 2013软件.MathType软件 方法步骤 安装Mat

解决VNC中tab键无效的方法

http://ubuntuforums.org/archive/index.php/t-1771058.html I accidentally discovered a fix for this while trying to solve a different problem.edit~/.config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xmlfind the line <property name="&l

Linux中的gpio口使用方法

Linux中的IO使用方法 应该是新版本内核才有的方法.请参考:./Documentation/gpio.txt文件 提供的API:驱动需要包含 #include <linux/gpio.h> 判断一个IO是否合法:int gpio_is_valid(int number); 设置GPIO的方向,如果是输出同时设置电平:/* set as input or output, returning 0 or negative errno */int gpio_direction_input(unsi

js oop中的三种继承方法

JS OOP 中的三种继承方法: 很多读者关于js opp的继承比较模糊,本文总结了oop中的三种继承方法,以助于读者进行区分. <继承使用一个子类继承另一个父类,子类可以自动拥有父类的属性和方法.(继承的两方,发生在两个类之间)> 一.通过object实现继承 1:定义父类 function Parent(){} 2:定义子类 funtion Son(){} 3:通过原型给Object对象添加一个扩展方法. Object.prototype.customExtend = function(p

java中常用的包、类、以及包中常用的类、方法、属性-----io包

由于最近有需要,所以下面是我整理的在开发中常用的包.类.以及包中常用的类.方法.属性:有需要的看看 java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.math.*; java.sql.*; java.text.*; java.awt.*; javax.swing.*;   包名 接口 类 方法 属性 java.io.*; java.io.Serializable实现序列化 java.io.Buffe

只显示前几条数据的sql语句写法 七种数据库中Select Top的使用方法

七种数据库中Select Top的使用方法 1. Oracle数据库 SELECT * FROM TABLENAME WHERE ROWNUM <= N 2. Infomix数据库 SELECT FIRST N * FROM TABLENAME 3. DB2数据库 SELECT * FROM (SELECT * ROW_NUMBER() OVER({ORDER BY COL1 DESC}) AS ROWNUM FROM TABLENAME) WHERE ROWNUM <= N 或者 SELEC

Struts2中Action接收参数的方法主要有以下三种:

Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接收:通过属性接收参数,如:userName:     c.发送:使用属性名传递参数,如:user1!add?userName=jim: 2.使用DomainModel接收参数:     a.定义:定义Model类,在Action中定义Model类的对象(不需要new),创建该对象的get和set方法

Java中静态关键字的使用方法介绍三

1.1      静态方法main()的解析 1.1.1   静态方法main()的语句组成 在我们使用java语言进行编程中,常常用到要一个main()函数,这是一个程序的入口,是整个程序中最为重要的部分之一.通常,main函数按照以下格式进行书写. public static void main(String[] args) { } 我们发现main()函数前面存在静态修饰符Static那说明main函数就是一个静态方法.那么这个main函数语句到底由什么组成呢?下面我们就来分析一下main