Linq学习系列-----1.2 一个简单方法的改进思考及不同的执行形式
一.普通模式:
#region 模式1
public Form1()
{
InitializeComponent();
GetProcessByJudge();
} public bool MemoryCountJudge(ProcessClass cl)
{
if (cl.MemoryCount > * )
{
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 > * )
{
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 > * )
{
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 > * )
{
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表达式来转换,达到简化代码的目的。
Linq学习系列-----1.2 一个简单方法的改进思考及不同的执行形式的更多相关文章
- LINQ学习系列-----2.1 一个Linq语句
Linq语句介绍 先上源码: 上述代码涵盖了Linq新特性: 代码解析: 针对本文中的几点特性,前面有文章进行阐述.
- LINQ学习系列-----1.3 扩展方法
这篇内容继续接着昨天的Lambda表达式的源码继续下去.昨天讲了Lambda表达式,此篇讲扩展方法,这两点都是Linq带来的新特性. 一.扩展方法介绍 废话不多说,先上源码截图: 上图中Ge ...
- LINQ学习系列-----2.3 迭代器带来的延迟查询
此篇博文承接上一篇博文: LINQ学习系列-----2.2 迭代器 一.第一次执行 废话不多说,上源码: 执行结果下图: 为什么会这样?其实原因很简单 fro ...
- scrapy爬虫学习系列二:scrapy简单爬虫样例学习
系列文章列表: scrapy爬虫学习系列一:scrapy爬虫环境的准备: http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_python_00 ...
- [Ruby on Rails系列]6、一个简单的暗语生成器与解释器(上)
[0]Ruby on Rails 系列回顾 [Ruby on Rails系列]1.开发环境准备:Vmware和Linux的安装 [Ruby on Rails系列]2.开发环境准备:Ruby on Ra ...
- 用Qt写软件系列三:一个简单的系统工具(上)
导言 继上篇<用Qt写软件系列二:QIECookieViewer>之后,有一段时间没有更新博客了.这次要写的是一个简单的系统工具,需求来自一个内部项目.功能其实很简单,就是查看当前当前系统 ...
- Netty源码学习系列之4-ServerBootstrap的bind方法
前言 今天研究ServerBootstrap的bind方法,该方法可以说是netty的重中之重.核心中的核心.前两节的NioEventLoopGroup和ServerBootstrap的初始化就是为b ...
- Linux内核分析第三周学习总结:构造一个简单的Linux系统MenuOS
韩玉琪 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.Linux内 ...
- Golang学习-第二篇 搭建一个简单的Go Web服务器
序言 由于本人一直从事Web服务器端的程序开发,所以在学习Golang也想从Web这里开始学起,如果对Golang还不太清楚怎么搭建环境的朋友们可以参考我的上一篇文章 Golang的简单介绍及Wind ...
随机推荐
- LINUX 笔记-iostat命令
显示CPU和I/O统计信息 iostat的不带参数的显示CPU和I/ O的所有分区的统计信息 -c Display the CPU utilization report. -d Display the ...
- HDFS 简介
hadoop分别从3个角度将主机划分为2种角色 最基本的是Master 和 从HDFS角度,将主机划分为namenode和datanode,在分布式文件系统中,目录管理很重要,管理目录相当于主人 从m ...
- ASP.NET没有魔法——Identity与Owin
上篇文章介绍了如何在ASP.NET MVC项目中引入Identity组件来实现用户注册.登录及身份验证功能,并且也提到了Identity是集成到Owin中的,本章就来介绍一下什么是Owin以及如何使用 ...
- JS框架设计读书笔记之-选择器引擎02
选择器引擎涉及相关概念 概念 以Sizzle的主函数声明为例,来说明引擎的相关概念. function Sizzle(selector, context, results, seed) { //... ...
- How to use VisualSVN Server and TortoiseSVN to host your codes and control your codes' version
############################### PART ONE ############################### #1. Introduction of the ...
- net start mongodb 服务名无效解决方案
net start mongodb 服务名无效 或者 net start mongodb 发生错误5,拒绝访问.是因为没有用管理员权限运行cmd. 解决方案:在window中,在搜索框输入cmd后,在 ...
- Windows环境下多线程编程原理与应用读书笔记(1)————基本概念
自从学了操作系统知识后,我就对多线程比较感兴趣,总想让自己写一些有关多线程的程序代码,但一直以来,发现自己都没怎么好好的去全面学习这方面的知识,仅仅是完成了操作系统课程上的小程序,对多线程的理解也不是 ...
- echarts2.2.7本地搭建
1.首先下载echarts2.2.7,解压到本地,解压后的目录如下: 2.在WebContent下建立一个名为build的目录,复制echarts2.2.7下面的build下面的dist目录到ecli ...
- mac nexus搭建本地maven服务器
1.在保证安装jdk 1.7+,去nexus官网下载nexus(http://www.sonatype.com/download-oss-sonatype) 最新版本 2.解压zip文件,配置nexu ...
- C# let 子句
在查询表达式中,存储子表达式的结果有时很有帮助,可在后续子句中使用. 可以通过 let 关键字执行此操作,该关键字创建一个新的范围变量并通过提供的表达式结果初始化该变量. 使用值进行初始化后,范围变量 ...