LinQ—扩展方法

概述

本节主要讲解扩展方法,涉及LinQ的具体知识不多。

扩展方法的描述

.net framework为编程人员提供了很多的类,很多的方法,但是,不论.net
framework在类中为我们提供了多么多的方法,有时候仍然不能满足我们的需求,例如:你想让字符串对象具有ToPascal方法,含义就是将字符串转化为Pascal格式,并返回,我们知道,.net
framework提供的String类中并没有为我们提供相应的方法,此时,我们应该怎么做才可以达到我们的目的呢?有人说可以继承String类,这个不行,因为.net
framework提供的类都是finnal类,最终类,不能被继承,那么,怎么样才可以解决这个问题呢?此时,就出现了扩展方法

扩展方法的目的和好处

为现有类提供一些额外的方法,这样做的好处就是,原有类不需要重新编译生成,只需要在程序中引入一些额外的dll就可以了

扩展方法的使用

为String类添加一个ToPascal方法,实现将自己格式化为Pascal格式的字符串并返回

    //扩展方法的定义
    public static classExtraClass{//静态类,类名随意
        public static String ToPascal(this string s) {
            stringstrName = s.Substring(0, 1).ToUpper() +s.Substring(1).ToLower();
            return strName;
        }
    }
    //扩展方法的使用
    String strName="GreenHill";
    strName.ToPascal();//返回的结果为Pascal格式的字符串
    解释
         string:返回值的类型;
         ToPascal:扩展的方法名;
         this string:扩展所有类;
         s:对象名;

注意:在使用String类的ToPascal方法时,必须要在程序中引入ExtraClass类

上面的这种方式是没有参数的写法,那么有参数的怎么写呢?有兴趣的可以下去自己查查,相信在读了这一篇博客的基础上,再学习扩展方法的其它具体的定性时,会变得非常轻松。

扩展方法和LinQ的关系

扩展方法是实现LinQ的基础,因为LinQ的具体实现就是通过扩展方法实现的,也就是说LinQ就是往.net
framework的原有的一些类上添加了一些扩展方法,从形式来说,达到了一种通过使用不同对象的相同方法,实现一样的目的。

总结

在实际的应用中,为.net framework中的类扩展一些方法是不常用的,最起码我现在在实际的项目中没用过,所以,对于上面扩展方法的描述的需求,我们要站在另一个高度看,也就是说,扩展方法是微软为了引入LinQ而作的工作,扩展方法的真正目的是为了LinQ。

LinQ—扩展方法,布布扣,bubuko.com

时间: 2024-08-08 01:29:06

LinQ—扩展方法的相关文章

ABP框架源码中的Linq扩展方法

文件目录:aspnetboilerplate-dev\aspnetboilerplate-dev\src\Abp\Collections\Extensions\EnumerableExtensions.cs using System; using System.Collections.Generic; using System.Linq; namespace Abp.Collections.Extensions { /// <summary> /// Extension methods for

使用Linq扩展方法时容易忽略的小问题

问题重现 下面直接给出用于说明文章主题的完整代码. //************************************************************ // // Linq扩展方法示例代码 // // Author:三五月儿 // // Date:2014/10/01 // // http://blog.csdn.net/yl2isoft // //************************************************************

ToDictionary()LINQ扩展方法

ToList() 使用IEnumerable<T>并将其转换为 List<T>,那么 ToDictionary()也是类似的.大多数情况ToDictionary()是一个非常方便的方法,将查询的结果(或任何 IEnumerable<T>)转换成一个Dictionary<TKey,TValue>. 关键是您需要定义T如何分别转换TKey和TValue. 如果说我们有超级大的产品列表,希望把它放在一个Dictionary<int, product>,

【手记】走近科学之为什么JObject不能调用LINQ扩展方法

Json.NET的JObject明明实现了IEnumerable<T>,具体来说是IEnumerable<KeyValuePair<string, JToken>>,按说JObject类型的对象是可以直接调用Select.Where等linq扩展方法的,但偏偏就是不行,代码如下: using System.Linq; ... var jobj = new JObject(); var xxx = jobj.Select(x=>x); //报错:JObject未包含

Linq入门——什么是linq &amp; 扩展方法

一,什么是Linq linq(language integrated Query):语言集成查询: linq包含如下: 对对象的查询,对数据库的查询,对XML的查询. 那么,没有linq前我们是怎样查询的? 先看一个例子: 现在我们要查询大于50的数,: 在没有linq之前,我们的代码时这样的: 使用了linq查询: 首先,从直观上看,代码更加简洁,其次,对于查询部分,接近SQL语句,层次清晰,容易理解: 除了简单高效以为,LINQ的出现解决了很多问题: 1,面向对象与数据访问两个领域长期分裂,

Linq扩展方法获取单个元素

在使用Linq 提供的扩展方法时,First(OrDefault), Single(OrDefault), Last(OrDefault)都具有返回单个元素的功能.MSDN对这些方法的描述只有功能说明,没有关于内部的相关实现的描述说明. 首先我们来看下MSDN上关于这些扩展方法的官方描述: First: 返回序列中的第一个元素 . FirstOrDefault: 返回序列中的第一个元素:如果未找到元素,则返回默认值. Last:返回序列的最后一个元素. LastOrDefault: 返回序列中的

Linq扩展方法之All 、Any

// Summary: // 确定序列中的所有元素是否满足条件. // Parameters: // source:包含要应用谓词的元素的 System.Collections.Generic.IEnumerable`1. // predicate:用于测试每个元素是否满足条件的函数. // Type parameters: // TSource:source 中的元素的类型. // Returns:如果源序列中的每个元素都通过指定谓词中的测试,或者序列为空,则为 true:否则为 false.

Linq扩展方法

1.All()如果数据中所有条目斗鱼谓词匹配返回true 2.Any()至少有一条匹配返回true 3.Contains:指定条目或值返回true 4.count:返回条目数量 5.First:返回第一条条目 6.FirstOrDefault:返回第一条条目,若没有时返回默认值 7.last:返回最后一条条目 8.lastOrdefault:返回最后一条条目,若没有时返回默认值 9.max:返回最大值 10.min:返回最小值 11.orderBy:对数据进行排序 12.Reverse:反转数据

C#高级知识点概要(3) - 特性、自动属性、对象集合初始化器、扩展方法、Lambda表达式和Linq查询

1.特性(Attributes) 特性(Attributes),MSDN的定义是:公共语言运行时允许你添加类似关键字的描述声明,叫做attributes, 它对程序中的元素进行标注,如类型.字段.方法和属性等.Attributes和Microsoft .NET Framework文件的元数据保存在一起,可以用来向运行时描述你的代码,或者在程序运行的时候影响应用程序的行为.例如,在一个方法前标注[Obsolete]特性,则调用该方法时VS则会提示该方法已过期的警告,如下图: 又如,在.Net Re