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

目录
相关文章
|
7月前
|
Java
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
JavaSE——JDk8新特性(1/2):Lambda表达式(具体实现、函数式接口、简化setAll、Comparator),Lambda表达式的省略写法
65 1
|
8月前
|
开发框架 .NET C#
C#学习相关系列之Linq常用方法---排序(一)
C#学习相关系列之Linq常用方法---排序(一)
|
并行计算 Java 编译器
【javaSE】 Lambda表达式与Lambda表达式的使用
【javaSE】 Lambda表达式与Lambda表达式的使用
|
开发框架 .NET 编译器
C# Lambda表达式和linq表达式 之 匿名对象查询接收
C# Lambda表达式和linq表达式 之 匿名对象查询接收
|
JavaScript 前端开发 Java
函数式接口 & lambda表达式 & 方法引用
函数式接口 & lambda表达式 & 方法引用
135 0
|
存储 SQL 开发框架
Linq To Object标准操作符最强总结
Linq To Object标准操作符最强总结
147 0
|
SQL C# 数据库
C# Lambda表达式Contains方法 like
原文:Lambda表达式Contains方法 like 1、使用Contains方法的必备条件: Contains等价于SQL中的like语句。不过Contains只针对于字符串(string)类型的数据而言。
2104 0
|
.NET 数据库 Windows

热门文章

最新文章