LinQ---扩展方法和Lambda表达式

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

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值