Linq学习系列-----1.2 一个简单方法的改进思考及不同的执行形式

       一.普通模式:  

        #region 模式1
        public Form1()
        {
            InitializeComponent();
            GetProcessByJudge();
        }

        public bool MemoryCountJudge(ProcessClass cl)
        {
            if (cl.MemoryCount > 24 * 1024)
            {
                return true;
            }
            return false;
        }

        public void GetProcessByJudge()
        {
            Process[] processArray = Process.GetProcesses();
            List<ProcessClass> result = new List<ProcessClass>();
            foreach (Process item in processArray)
            {
                result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
            }

            //Show
            foreach (ProcessClass item in result)
            {
                if (MemoryCountJudge(item))
                {
                    textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
                }
            }
        }
        #endregion

         二.委托模式          

        #region 模式2
        public delegate bool MemoryCountJudgeDelegate(ProcessClass cl);
        MemoryCountJudgeDelegate del = null;

        public Form1()
        {
            InitializeComponent();
            del = new MemoryCountJudgeDelegate(MemoryCountJudge);
            GetProcessByJudge();
        }

        public bool MemoryCountJudge(ProcessClass cl)
        {
            if (cl.MemoryCount > 24 * 1024)
            {
                return true;
            }
            return false;
        }


        public void GetProcessByJudge()
        {
            Process[] processArray = Process.GetProcesses();
            List<ProcessClass> result = new List<ProcessClass>();
            foreach (Process item in processArray)
            {
                result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
            }

            //Show
            foreach (ProcessClass item in result)
            {
                if (del(item))
                {
                    textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
                }
            }
        }
        #endregion

           三.Lambda与匿名委托        

        public Form1()
        {
            InitializeComponent();
            GetProcessByJudge();
        }

        Func<ProcessClass, bool> func = instance =>
        {
            if (instance.MemoryCount > 24 * 1024)
            {
                return true;
            }
            return false;
        };

        public void GetProcessByJudge()
        {
            Process[] processArray = Process.GetProcesses();
            List<ProcessClass> result = new List<ProcessClass>();
            foreach (Process item in processArray)
            {
                result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
            }

            //Show
            foreach (ProcessClass item in result)
            {
                if (func(item))
                {
                    textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
                }
            }
        }

             四.Lambda与匿名委托的改进

                    

public Form1()
          {
                InitializeComponent();
                GetProcessByJudge(instance =>
                {
                    if (instance.MemoryCount > 24 * 1024)
                    {
                        return true;
                    }
                    return false;
                });

            }

            public void GetProcessByJudge(Func<ProcessClass, bool> func)
            {
                Process[] processArray = Process.GetProcesses();
                List<ProcessClass> result = new List<ProcessClass>();
                foreach (Process item in processArray)
                {
                    result.Add(new ProcessClass(item.Id, item.ProcessName, item.WorkingSet64));
                }

                //Show
                foreach (ProcessClass item in result)
                {
                    if (func(item))
                    {
                        textBox1.Text += string.Format("ID:{0},Name:{1},Size:{2}", item.ID, item.ProcessName, item.MemoryCount) + Environment.NewLine;
                    }
                }
            }

    四种代码:执行效果

                      

        总结: 1.委托其实就是方法的指针,任何方法均可转化为委托,然后调用委托来执行方法。虽说在这里看到代码量增多,但是真正的用处在构建复杂系统或搭建ORM时,将产生巨大作用。

                  2.系统提供了Action和Func两种匿名委托,Action是不需要返回结果值,Func需要返回结果值。在这里,我们可以不用建立自己的委托,调用匿名委托即可。

                  3.结合Lambda表达式和委托的兼容性,将语句方法体 用Lambda表达式来转换,达到简化代码的目的。

原文地址:https://www.cnblogs.com/xiaowangzi1987/p/7906261.html