分享一个简单的资源管理器程序,主要是演示下LINQ在C#开发中的运用
2013-03-11 15:30
661 查看
以前有人在论坛里面问过,如何实现一个类似资源管理器的界面,其实运用 System.IO 下的一组API,很容易查询文件系统的文件。虽然说容易,但是还是很多人希望能看到具体的代码。下面我对其中最关键的代码作一个演示,程序尽可能简单,以便大家关注于主要问题。
先看下效果图:
代码下载 http://download.csdn.net/detail/caozhy/4169965。
本程序中使用了LINQ语法,简洁性大家可以自己体会,由于LINQ的运用,程序甚至连一个循环语句都不需要。很多人有一种误解,说到LINQ,就是数据库访问,就是ORM框架,就是转化成SQL执行等等,其实这是对LINQ的误解,我想用这个例子程序说明,LINQ没有那么神秘,它就是C# 3时代的一种简单语法,它可以融入到程序的每个角落。大家可以放心大胆地使用LINQ简化开发,书写紧凑的代码。
说一下这个程序的主要意图:
首先看到的是Form_Load,它的作用是加载根节点和驱动器列表:
C# code
?
你没有看错,一行就写完了。
如果不用LINQ,我们可以怎么写呢?
C# code
?
这段代码的作用和上面的LINQ写法作用是等效的。可是明显写的更复杂了。
使用LINQ写法,用到了Select操作符,这个操作才我们的程序中还会反复出现,所以简单介绍下。
很多人用过SQL,知道用select可以从表中选定某几列,在数学上,这个操作叫投影,通俗地说,就是对集合中的每一个元素做这样一种变换(什么变换由select子句决定),让每个元素成为另一种类型的元素,得到一个新的集合。
从数据中选择几列只是select操作的特例,在LINQ中,Select操作可以方便地将某个类型转换成另一个类型,在这里我们把查询出来的DriveInfo类型对象转换为Nodes.Add()方法理解的TreeNode类型。为此我们使用了一个Lambda表达式:
C# code
?
它相当于你写了这么一个函数:
C# code
?
这个函数由谁调用呢?由LINQ调用,而不是你,虽然它是你定义的。
你将函数作为参数传给LINQ,LINQ通过反过来调用你的函数实现这种转换,再提供给你转换后的集合。
之后看到的是treeView1_BeforeExpand事件,它的作用是在展开节点的时候加载下面每个子节点再下一层的节点,为什么要子节点再下一层呢?这样可以让那些包含再下一层元素的节点提前出现“+”号,在展开的时候可以看到。这种按需加载TreeNode的技术很常用,希望新手们熟练掌握。
然后我们看到的是另一个事件处理函数treeView1_AfterSelect,它的作用是在点了某个节点的时候在ListView里面加载这个文件夹下的文件夹和文件。按照Windows习惯,先显示文件夹再显示文件。而且分别对文件夹和文件排序。请问这个如何实现?
如果用LINQ同样简单,只需要使用OrderBy操作就可以了。
附代码如下:
C# code
?
先看下效果图:
代码下载 http://download.csdn.net/detail/caozhy/4169965。
本程序中使用了LINQ语法,简洁性大家可以自己体会,由于LINQ的运用,程序甚至连一个循环语句都不需要。很多人有一种误解,说到LINQ,就是数据库访问,就是ORM框架,就是转化成SQL执行等等,其实这是对LINQ的误解,我想用这个例子程序说明,LINQ没有那么神秘,它就是C# 3时代的一种简单语法,它可以融入到程序的每个角落。大家可以放心大胆地使用LINQ简化开发,书写紧凑的代码。
说一下这个程序的主要意图:
首先看到的是Form_Load,它的作用是加载根节点和驱动器列表:
C# code
?
如果不用LINQ,我们可以怎么写呢?
C# code
?
使用LINQ写法,用到了Select操作符,这个操作才我们的程序中还会反复出现,所以简单介绍下。
很多人用过SQL,知道用select可以从表中选定某几列,在数学上,这个操作叫投影,通俗地说,就是对集合中的每一个元素做这样一种变换(什么变换由select子句决定),让每个元素成为另一种类型的元素,得到一个新的集合。
从数据中选择几列只是select操作的特例,在LINQ中,Select操作可以方便地将某个类型转换成另一个类型,在这里我们把查询出来的DriveInfo类型对象转换为Nodes.Add()方法理解的TreeNode类型。为此我们使用了一个Lambda表达式:
C# code
?
C# code
?
你将函数作为参数传给LINQ,LINQ通过反过来调用你的函数实现这种转换,再提供给你转换后的集合。
之后看到的是treeView1_BeforeExpand事件,它的作用是在展开节点的时候加载下面每个子节点再下一层的节点,为什么要子节点再下一层呢?这样可以让那些包含再下一层元素的节点提前出现“+”号,在展开的时候可以看到。这种按需加载TreeNode的技术很常用,希望新手们熟练掌握。
然后我们看到的是另一个事件处理函数treeView1_AfterSelect,它的作用是在点了某个节点的时候在ListView里面加载这个文件夹下的文件夹和文件。按照Windows习惯,先显示文件夹再显示文件。而且分别对文件夹和文件排序。请问这个如何实现?
如果用LINQ同样简单,只需要使用OrderBy操作就可以了。
附代码如下:
C# code
?
相关文章推荐
- 分享一个C#实现的迷宫生成程序,继续演示LINQ语法在C#中的运用
- 【C#】对异步请求处理程序IHttpAsyncHandler的理解和分享一个易用性封装 【手记】走近科学之为什么明明实现了IEnumerable<T>的类型却不能调用LINQ扩展方法 【手记】手机网页弹出层后屏蔽底层的滑动响应 【手记】ASP.NET提示“未能创建类型”处理 【Web】一个非常简单的移动web消息框 【手记】解决EXCEL跑SQL遇“查询无法运行或数据库表无法打开...”
- 分享一个C#编写简单的聊天程序(详细介绍)
- 简单的JSP购物程序(综合运用JavaBean、JDBC、JSP隐含对象,开发一个小型网上购物系统)
- C#事件演示程序1)——一个最简单的C#事件处理程序
- 简介 WatiN是一个开源的用于Web测试自动化的类库,从watir中获得的灵感,使用C#开发。WatiN通过与浏览器的交互来实现自动化,使用起来具有轻便,简单的特点。目前最新版本为2.0,加入了对
- C#:一个增强的TcpListener(*)服务器演示程序及源代码下载
- C# 一个简单分词程序的思路和代码(一)
- 一个简单的c#+sqlserver本地操作程序
- 一个简单的JMF开发的摄像头拍照程序源码
- C# 一个简单分词程序的思路和代码(七) 后记
- 一个简单的Excel VBA 运用程序----录制宏
- 分享一个Asp.net(C#)开发的Wiki Engine
- C#.NET软件项目中程序开发外包经验分享【从接包者转变为发包者】
- C#.NET软件项目中程序开发外包经验分享【从接包者转变为发包者】
- C#简单实现贪吃蛇程序(LinQ + Entity)
- 3年前的一个小项目经验,分享给菜鸟兄弟们(公文收发小软件:程序开发部分)
- 在 .NET 中开发基于 Chrome 内核的浏览器-创建一个简单浏览器 分类: C# 2014-10-27 16:27 594人阅读 评论(0) 收藏
- C#核编之一个简单的C#程序
- iOS开发UI篇—使用嵌套模型完成的一个简单汽车图标展示程序