美文网首页
C#重温—扩展方法

C#重温—扩展方法

作者: 高调的小丑 | 来源:发表于2018-08-07 17:44 被阅读15次

注意点:

  1. 必须在一个非嵌套的、非泛型的静态类中(所以必须是一个静态方法)
  2. 至少有一个参数
  3. 第一个参数必须附加this关键字作为前缀
  4. 第一个参数不能有其他任何修饰符(比如out、ref)
  5. 第一个参数的类型不能是指针类型

扩展方法最大的用途就是为LINQ服务,Enumerable和Queryable都是在System.Linq命名空间中,Enumerable的大多数扩展的是IEnumerable<T>,Queryable的大多数扩展的是IQueryable<T>。

public class Person
{
    public string Name { set; get; }
    public int Age { set; get; }
}

public static class Extension
{
    //Person的扩展方法,根据年龄判断是否是成年人
    public static bool IsChild(this Person oPerson)
    {
        if (oPerson.Age >= 18)
            return false;
        else
            return true;
    }
}

附上经典的linq中Distinct去重,我们无法按照具体需求或某个字段去重,这时候扩张方法就派上用场了

public static class DistinctExtensions  
{  
   public static IEnumerable<T> Distinct<T, V>(this IEnumerable<T> source, Func<T, V> keySelector)  
   {  
        return source.Distinct(new CommonEqualityComparer<T, V>(keySelector));  
    }  
} 

public class CommonEqualityComparer<T, V> : IEqualityComparer<T>  
{  
    private Func<T, V> keySelector;  
  
    public CommonEqualityComparer(Func<T, V> keySelector)  
    {  
        this.keySelector = keySelector;  
    }  
  
    public bool Equals(T x, T y)  
    {  
        return EqualityComparer<V>.Default.Equals(keySelector(x), keySelector(y));  
    }  
  
    public int GetHashCode(T obj)  
    {  
        return EqualityComparer<V>.Default.GetHashCode(keySelector(obj));  
    }  
}  

使用

Product[] products =   
{  
    new Product { Name = "Smallapple", Code = 9 },   
    new Product { Name = "orange", Code = 4 },   
    new Product { Name = "Bigapple", Code = 9 },  
    new Product { Name = "lemon", Code = 12 }  
};  
  
var p1 = products.Distinct(p => p.Code); //按照code来去重 
foreach (Product pro in p1)  
    Console.WriteLine(pro.Name + "," + pro.Code); 
Console.ReadKey();

相关文章

  • C#重温—扩展方法

    注意点: 必须在一个非嵌套的、非泛型的静态类中(所以必须是一个静态方法) 至少有一个参数 第一个参数必须附加thi...

  • C#扩展方法

    C#扩展方法,使用this关键字 1、扩展方法能够向现有类型“添加”方法,而无需创建新的派生类型、重新编译或以其他...

  • C#扩展方法

    转载自:c# 扩展方法详解扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方...

  • U3D_03_13

    关于C#的编程知识 注意了:C#扩展方法的声明必须是静态类和静态方法,你看这里都标注了static就是这个原因,使...

  • C#的扩展方法

    public void class person{ publicperson() {private int...

  • C# LINQ扩展方法

    这几个方法IEnumerable都提供,大部分都返回IEnumerable对象,这样就能连接起来用。IEnumer...

  • C#扩展方法实现

    扩展方法被定义为静态方法,但它们是通过实例方法语法进行调用的。 它们的第一个参数指定该方法作用于哪个类型,并且该参...

  • C#-扩展方法

    Extension Method(扩展方法)这是C#的特性,它允许脚本在不更新特定类对象的情况下,给类增加特定方法...

  • Unity的C#扩展方法

    一、扩展方法的条件:1、必须声明为静态类2、必须声明为静态方法3、方法的第一个参数为this二、作用:1、频繁调用...

  • Unity3d-C#扩展方法 C#扩展方法

    扩展方法 所谓的扩展方法,其实就是无需继承就可以改写类,让类中增加方法。直接通过实例调用的静态方法,因此即使实例是...

网友评论

      本文标题:C#重温—扩展方法

      本文链接:https://www.haomeiwen.com/subject/ojzwvftx.html