扩展方法用法整理

扩展方法貌似平时很少用,平时基本都是用静态方法,其实静态方法也挺方便的。

class Program
    {
        static void Main(string[] args)
        {
            var p = new Person() { BirthTime = DateTime.Parse("1990-07-19") };
            var age = p.GetAge();//扩展方法调用起来更顺眼
            age = ExtensionClass.GetAge2(p);//静态方法调用
            Console.ReadKey();
        }
    }

    public static class ExtensionClass//注意扩展方法的类不能放到Program类里面,这样扩展方法就会报错
    {
        public static int GetAge2(Person person)//静态方法
        {
            if (person.DeathTime.HasValue)
                return (person.DeathTime.Value - person.BirthTime).Days / 365;
            else
                return (DateTime.Now - person.BirthTime).Days / 365;
        }

        public static int GetAge(this Person person)//扩展方法
        {
            if (person.DeathTime.HasValue)
                return (person.DeathTime.Value - person.BirthTime).Days / 365;
            else
                return (DateTime.Now - person.BirthTime).Days / 365;
        }
    }
    
    public class Person
    {
        public DateTime BirthTime { get; set; }
        public DateTime? DeathTime { get; set; }
    }

上面所有的都只是扩展方法的附加用处,扩展方法真正的威力是为Linq服务的(主要体现于IEnumerable和IQueryable)。下面简单列举个例子:

例:

        public static IList<T> MyWhere<T>(this IList<T> list, Func<T, bool> func)
        {
            List<T> newList = new List<T>();
            foreach (var item in list)
            {
                if (func(item))
                    newList.Add(item);
            }
            return newList;
        }

总结扩展方法的定义规则:静态类里面声明静态方法,方法(扩展方法)第一个参数(被扩展的类型)前面加“this”;

原文地址:https://www.cnblogs.com/chunhui212/p/5902808.html