WEB开发网
开发学院软件开发C语言 c#扩展方法奇思妙用变态篇二:封装 if/else、swit... 阅读

c#扩展方法奇思妙用变态篇二:封装 if/else、swith/case及while

 2010-09-30 20:46:12 来源:WEB开发网   
核心提示: 简单清晰明了!最后是一个对while的扩展封装: public static void While<T>(this T t, Predicate<T> predicate, Action<T> action) where T: class { while (p

简单清晰明了!

最后是一个对while的扩展封装:

        public static void While<T>(this T t,  Predicate<T> predicate, Action<T> action) where T: class
        {
            while (predicate(t)) action(t);
        }

调用代码:

        public static void Test6()
        {
            People people = new People { Name = "Wretch" };
            people.While(
                p => p.WorkCount < 7,
                p => p.Work()
                    );
            people.Rest();
        }

这里又“召唤”了一个人,不让吃喝不让休息,连续工作7次...

这while扩展中只能执行一个Action<T>,不太好,我们用params改进一下:

        public static void While<T>(this T t, Predicate<T> predicate, params Action<T>[] actions) where T : class
        {
            while (predicate(t))
            {
                foreach (var action in actions)
                    action(t);
            }
        }

再来调用,可以在循环中执行多个操作了,这次舒服工作完吃饭喝水休息,再来工作...

        public static void Test7()
        {
            People people = new People { Name = "Wretch" };
            people.While(
                p => p.WorkCount < 7,
                p => p.Work(),
                p => p.Eat(),
                p => p.Drink(),
                p => p.Rest()
                    );
            people.Rest();
        }

当然前面的If也可以这样的,这里只写出一个:

If改进

        public static T If<T>(this T t, Predicate<T> predicate, params Action<T>[] actions) where T : class
        {
            if (t == null) throw new ArgumentNullException();
            if (predicate(t))
            {
                foreach (var action in actions)
                    action(t);
            }
            return t;
        }

不使用 params,你就要显示声明一个Action<T>的集合了!

上一页  1 2 3 4 5 6 

Tags:扩展 方法 奇思

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接