LinQ---扩展方法和Lambda表达式
扩展方法:
扩展方法使您能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他方式修改原始类型。扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用。对于用 C# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法之间没有明显的差异。
格式:
public static class classA { public staticvoid ExtraMethod(this string s){…} }
例如:
public static class ExtraClass { //拓展方法,特殊的静态方法 public static string ToPascal(this string s) //this后带类型,表名为该类型添加特殊的方法 { return s.Substring(0,1).ToUpper() + s.Substring(1).ToLower(); } }
注意事项:
- 扩展方法是一种特殊的静态方法
- 扩展方法必须在静态类中定义
- 扩展方法的优先级低于同名的类方法
- 扩展方法只在特定的命名空间内有效
- 除非必须不要滥用扩展方法
Lambda表达式
C#Lambda基本的表达形式:(参数列表) => {方法体}
说明
参数列表中的参数类型可以是明确类型或者是推断类型
如果是推断类型,则参数的数据类型将由编译器根据上下文自动推断出来
Lambda 用在基于方法的 LINQ 查询中,作为诸如Where 和 Where 等标准查询运算符方法的参数。
实例分析
public partial class Form1 : Form { //定义一个委托 public delegate string deleTransfer(string s); public Form1() { InitializeComponent(); } private void btnTest_Click(object sender, EventArgs e) { //拓展方法---- string strTest = "asdsad"; Console.WriteLine(strTest.ToLower()); Console.WriteLine(strTest.ToUpper()); Console.WriteLine(strTest.ToPascal()); Console.WriteLine("-------------------------------------"); //Lambda 来源 //.Net FrameWork 1.0委托---函数指针 deleTransfer trans = new deleTransfer(ToPascal); //委托指向方法ToPascal Console.WriteLine(trans("abcdEFGH")); //.net 2.0 匿名方法 deleTransfer transs = delegate(string s) { return s.Substring(0,1).ToUpper() + s.Substring(1).ToLower(); }; Console.WriteLine(transs("abcdEFGH")); //.net 3.5 匿名方法 //deleTransfertransss = (s) => (s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower()); deleTransfer transss = s =>s.Substring(0, 1).ToUpper() + s.Substring(1).ToLower(); Console.WriteLine(transss("abcdEFGH")); } //将字符串的首字母转化为大写字母的方法 public string ToPascal(string s) { return s.Substring(0,1).ToUpper() + s.Substring(1).ToLower(); } } public static class ExtraClass { //拓展方法,特殊的静态方法 public static string ToPascal(this string s) //this后带类型,表名为该类型添加特殊的方法 { return s.Substring(0,1).ToUpper() + s.Substring(1).ToLower(); } public static string ToPascal(this string s, int len) //this后带类型,表名为该类型添加特殊的方法 { return s.Substring(0,1).ToUpper() + s.Substring(1, len).ToLower() + s.Substring(len + 1); } }
学习从分享开始(分享链接:http://pan.baidu.com/s/1AQgHo)