首页 > 代码库 > 扩展方法用法整理
扩展方法用法整理
扩展方法貌似平时很少用,平时基本都是用静态方法,其实静态方法也挺方便的。
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”;
扩展方法用法整理
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。