linq學習筆記1
2013-04-15 21:56
169 查看
學習linq, 必須要掌握的基礎知識
1. 泛型與委託:
泛型:/article/5901006.html
委託:delegate是一種類別, 封裝了一些方法,它的內部存儲了方法指針的清單。可以把它當成是一個特殊的class
使用:
2. 匿名方法:在程式碼的前面使用delegate關鍵字, 這種語法稱為匿名方法
3. iterator 與 yield: 包含yield關鍵字的方法, 稱為iterator
c#1.0使用foreach 语句可以轻松地迭代集合。在c#1.0中,创建枚举器仍需要做大量的工作。c#2.0添加了yield,讓編譯器自動產生實現了IEnumerator接口的類別, 簡化了我們创建枚举器的工作量.yield在迭代器块中用于向枚举数对象提供值或发出迭代结束信号
yield return 提供了迭代器一个比较重要的功能,即取到一个数据后马上返回该数据,不需要全部数据装入数列完毕,这样有效提高了遍历效率
4. 擴展方法: 必須是 static , public 且必須在 static類中, 且第一個參數前必須加上this關鍵字. 在此不做過多闡釋
5. 一般类型推理
6.lambda表達式:
C#2.0 可以使用匿名方法, 將delegate當作參數使用。C#3.0新增lambda表達式 可以定義更精準的語法來定義匿名方法。
lambda表達式可以選擇性的延後程式碼的產生,建立一個表達式的樹,可以對此樹的處理, 然後產生真正的程式碼。
當使用特定的程式片段, 就會產生表達式樹
表達式樹是 System.Linq.Expressions.Expression<T>類型的實體, T是此表達式樹所代表的delegate
泛型方法與表達式的區別,泛型方法在編譯期間傳化為IL,表達式是在執行期間轉化為IL。只有具有expression Body 的lambda表達式 才能轉化為表達式樹
表達式樹是表達式在內存中呈現, 需要調用Compile方法傳出一個delegate, 再使用invoke方法來調用此delegate
1. 泛型與委託:
泛型:/article/5901006.html
委託:delegate是一種類別, 封裝了一些方法,它的內部存儲了方法指針的清單。可以把它當成是一個特殊的class
使用:
delegate void DelegateA(); //定義一個委託, 相當於定義一個Class DelegateA a = new DelegateA(MethodA); //實例化委託, 相當於實例化一個Class //MethodA方法的聲明要與委託一致 void MethodA() {...} //也可以簡化寫法 DelegateA a =MethodA;
2. 匿名方法:在程式碼的前面使用delegate關鍵字, 這種語法稱為匿名方法
void Repeat10times( Delegate dosomething) { for (int i =0; i<10;i++) dosomething(); } void main() { Repeat10times(delegate { //匿名方法 console.writeLine("a"); } }
3. iterator 與 yield: 包含yield關鍵字的方法, 稱為iterator
c#1.0使用foreach 语句可以轻松地迭代集合。在c#1.0中,创建枚举器仍需要做大量的工作。c#2.0添加了yield,讓編譯器自動產生實現了IEnumerator接口的類別, 簡化了我們创建枚举器的工作量.yield在迭代器块中用于向枚举数对象提供值或发出迭代结束信号
yield return 提供了迭代器一个比较重要的功能,即取到一个数据后马上返回该数据,不需要全部数据装入数列完毕,这样有效提高了遍历效率
4. 擴展方法: 必須是 static , public 且必須在 static類中, 且第一個參數前必須加上this關鍵字. 在此不做過多闡釋
5. 一般类型推理
class Demo { //類型,結構,接口的變量, 不能使用var var k =0 ; //錯誤 //參數不能是 var public void MethodA(var a) {} //錯誤 //返回值不能是var public var MethodB() {} //錯誤 public void MethodC(){ var x; //錯誤, 這裡需要= var y =null; //錯誤, 無法從null推理出類型 } }
6.lambda表達式:
C#2.0 可以使用匿名方法, 將delegate當作參數使用。C#3.0新增lambda表達式 可以定義更精準的語法來定義匿名方法。
lambda表達式可以選擇性的延後程式碼的產生,建立一個表達式的樹,可以對此樹的處理, 然後產生真正的程式碼。
當使用特定的程式片段, 就會產生表達式樹
//lambda表達式範例 (int a, int b)=>{return a+b;} //statement body (int a, int b)=>a+b; //expressionbody (a, b)=>{return a+b;} //statement body (a, b)=>a+b //expressionbody (x)=>sum=+x //expressionbody x=>sum=+x //expressionbody ()=>sum =+1 //expressionbody
表達式樹是 System.Linq.Expressions.Expression<T>類型的實體, T是此表達式樹所代表的delegate
泛型方法與表達式的區別,泛型方法在編譯期間傳化為IL,表達式是在執行期間轉化為IL。只有具有expression Body 的lambda表達式 才能轉化為表達式樹
表達式樹是表達式在內存中呈現, 需要調用Compile方法傳出一個delegate, 再使用invoke方法來調用此delegate
相关文章推荐
- linq學習筆記2
- 【學習筆記】NS中輸出格式
- Gazebo機器人仿真學習探索筆記(二)基本使用說明
- Gazebo機器人仿真學習探索筆記(四)模型編輯
- Oracle 學習筆記001-緒論
- Oracle 學習筆記004 SQL基礎
- 【學習筆記】tableview分批显示数据
- LVM 學習筆記 --转载
- Gazebo機器人仿真學習探索筆記(二)基本使用說明
- Gazebo機器人仿真學習探索筆記(四)模型編輯
- Oracle 學習筆記004 SQL基礎
- andorid 學習筆記
- 【學習筆記】SQLITE SQL语句的注意 跟ms sql的區別
- 德瑞克:SQL Server 學習筆記
- Linux學習筆記--Samba服務
- Gazebo機器人仿真學習探索筆記(五)環境模型
- C語言學習筆記--基礎語法三
- Android學習筆記整理 2011.02.15 1
- WinForm 學習筆記[c sharp]
- 【學習筆記】sqlite操作