码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2014-11-30 16:58:50      阅读:194      评论:0      收藏:0      [点我收藏+]

标签: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

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

标签:linq   扩展方法 lambda表达式   

原文地址:http://blog.csdn.net/senior_lee/article/details/41623225

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!