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)