.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.我這里只提供示例,關於上面提到方法的詳細應用大家可以自行百度。