zoukankan      html  css  js  c++  java
  • 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表达式来转换,达到简化代码的目的。

  • 相关阅读:
    No-3.算数运算符
    No-2.注释
    No-1.第一个 Python 程序
    mtcnn网络训练--------------->>>
    sudo vim ~/.condarc
    CVPR2021佳作 | One-Shot都嫌多,Zero-Shot实例样本分割
    查询--主机硬件结构类型
    人群计数:
    共享盘登录
    C++---->>YOLOv4-detect_demo.py参考
  • 原文地址:https://www.cnblogs.com/xiaowangzi1987/p/7906261.html
Copyright © 2011-2022 走看看