首页 > 代码库 > 扩展方法用法整理

扩展方法用法整理

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

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”;

 

扩展方法用法整理