嘿,原來不認識你,想不到你這么好用—說說.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.我這里只提供示例,關於上面提到方法的詳細應用大家可以自行百度。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM