C#语言在近些年得到了长足的方法,代码风格越来越简洁美观,例如常用的泛型及其约束、可空类型、隐式类型、匿名类型和委托等,通过下面的表格可以对这部分相对简单的特性的使用有一个初步的了解。

特性

示例

泛型及其约束

class Sample<T> where T : Stream

可空类型

Nullable<int>,int?, 注意这个可空类型为一个结构体而不是类

隐式类型

var i = 0;

匿名类型

var xionger = new {Name="xionger", age=27}

简化的迭代器

For(var i=0; i < 3; i++)

{ yield return i;}

委托

Action<T>, Func<T, TResult>,在使用委托时需要注意闭包的概念(和javascript中的类似),理解闭包对象的生命周期

扩展方法

public static bool IsNull(this String x){}

动态类型

Dynamic expando = new ExpandoObject();在做一些模板方法和复用代码时非常有用。

分部类

partial class, 使用场景:扩展代码生成工具的类;某些服务类过大,对其进行逻辑拆分,便于维护

lambda表达式和表达式树

returnLength = text => text.length;而表达式树是一个类似语法树的树形结构。

Expression firstArg = Expression.Constant(2);

Expression secondArg = Expression.Constant(3);

Expression add = Expression.Add(firstArg, secondArg);

由于这部分的特性理解和使用相对容易就不详细介绍了,而之后的表达式树、linq和异步模型相对复杂,将进行详细介绍。

Linq可以通过一个中间模型将两种存在差异的数据模型通过统一的方式调用,非常的方便,接下来通过一个简单表格描述Linq的常见操作,在实际中,个人还是比较推荐扩展方法的方式。

操作和扩展

示例

选择元素

var query = from user in SampleData.AllUsers select user;

过滤和排序

var query = from defect in SampleData.AllDefects

where defect.Status != Status.Closed

where defect.AssignedTo = tim

orderby defect.Severity descending

select defect.Summary;

Let字句

引入局部变量

var query = from user in SampleData.AllUsers

let length = user.Name.length

orderby length

select new {Name = user.Name, Length = length}

连接

介绍一个相对复杂的分组连接。

var query = from defect in SampleData.AllDefects

join subscription in SampleData.AllSubscriptions

on defect.Project equals subscription.Project

into groupedSubscriptions

select new {Defect = defect, Subscription = groupedSubscriptions }

分组

var query = from defect in SampleData.AllDefects

group defect by defect.AssignedTo

此外,Linq对SQL、XML和对象集合都提供了非常简便的API方法,可以查看相关博客http://www.cnblogs.com/luckdv/articles/1728088.html

这个给予TPL的C#5特性非常的有意思,可以将异步操作的调用转化为同步的形式,非常的便捷,一个非常简单的例子如下所示。

 async void DisplayWebsiteLength(object sender, EventArgs e)

 {

 Label.Text = "Fetching...";

 using(HttpClient client = new HttpClient()){

 Task<string> task = client.GetStringAsync("www.bjork.com");

 String text = await task;

 Label.Text = text.Length.ToString();

 }}

tip:

PadLeft由于在字符串左侧补零。

参考资料

  1. (英)Jon, Skeet. 《深入理解C#(第3版)》[M]. 北京:人民邮电出版社, 2014.

快速入门系列--深入理解C#的更多相关文章

  1. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  2. 快速入门系列--MVC--01概述

    虽然使用MVC已经不少年,相关技术的学习进行了多次,但是很多技术思路的理解其实都不够深入.其实就在MVC框架中有很多设计模式和设计思路的体现,例如DependencyResolver类就包含我们常见的 ...

  3. 快速入门系列--MVC--02路由

    现在补上URL路由的学习,至于蒋老师自建的MVC小引擎和相关案例就放在论文提交后再实践咯.通过ASP.NET的路由系统,可以完成请求URL与物理文件的分离,其优点是:灵活性.可读性.SEO优化.接下来 ...

  4. WPF快速入门系列(4)——深入解析WPF绑定

    一.引言 WPF绑定使得原本需要多行代码实现的功能,现在只需要简单的XAML代码就可以完成之前多行后台代码实现的功能.WPF绑定可以理解为一种关系,该关系告诉WPF从一个源对象提取一些信息,并将这些信 ...

  5. WPF快速入门系列(1)——WPF布局概览

    一.引言 关于WPF早在一年前就已经看过<深入浅出WPF>这本书,当时看完之后由于没有做笔记,以至于我现在又重新捡起来并记录下学习的过程,本系列将是一个WPF快速入门系列,主要介绍WPF中 ...

  6. [转]快速入门系列--WebAPI--01基础

    本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...

  7. 前端学习 node 快速入门 系列 —— 简易版 Apache

    其他章节请看: 前端学习 node 快速入门 系列 简易版 Apache 我们用 node 来实现一个简易版的 Apache:提供静态资源访问的能力. 实现 直接上代码. - demo - stati ...

  8. vue 快速入门 系列 —— 虚拟 DOM

    其他章节请看: vue 快速入门 系列 虚拟 DOM 什么是虚拟 dom dom 是文档对象模型,以节点树的形式来表现文档. 虚拟 dom 不是真正意义上的 dom.而是一个 javascript 对 ...

  9. vue 快速入门 系列 —— 侦测数据的变化 - [基本实现]

    其他章节请看: vue 快速入门 系列 侦测数据的变化 - [基本实现] 在 初步认识 vue 这篇文章的 hello-world 示例中,我们通过修改数据(app.seen = false),页面中 ...

随机推荐

  1. 大文件下载控件(down2)-示例更新-Xproer.HttpDownloader

    版权所有 2009-2016 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webapp/down2/i ...

  2. (转)RHEL/CentOS 6.x使用EPEL6与remi的yum源安装MySQL 5.5.x

    PS:如果既想获得 RHEL 的高质量.高性能.高可靠性,又需要方便易用(关键是免费)的软件包更新功能,那么 Fedora Project 推出的 EPEL(Extra Packages for En ...

  3. Apache连接PHP后无法启动问题解决思路

    问题:apache之前正常,连接配置完PHP后无法启动,用apache Test Configration测试后报错形式为: Cannot load D:/php/php5apache2_2.dll ...

  4. angularjs 1.x $q模块使用

    什么是$q $q是angularjs1.x中内置服务,在需要使用时可以注入它. angular.module('app').controller('myController', function my ...

  5. Enable MFA for a user

    If you are root/admin account, in order to configure a virtual MFA device, you must have physical ac ...

  6. oracle sys as dba

    ====管理分区表====1.添加分区(若已设置取值范围为MAXVALUE的分区,则会报ORA-14174分区界限必须调整为高于最后一个分区界限)alter table test_part_tab a ...

  7. toad的基本操作

    1.把鼠标停在sql所在行,然后ctrl+Enter直接执行当前sql. 2.解决Toad对中文显示乱码问题(如果数据库所在主机的NLS_LANG是AMERICAN_AMERICA.WE8ISO885 ...

  8. Autolayout(VFL)

    Autolayout(VFL) 1.NSLayoutConstraint + (NSArray *)constraintsWithVisualFormat:(NSString *)format opt ...

  9. [poi2007] biu

    题意:给定一个图,点n<=105,边m<=106,现在求它的补图有多少个联通分量.. 思路:很容易想到并查集,但是补图边太多了.. 于是只能优化掉一些多余的边.. 具体做法是用队列优化.. ...

  10. GDB调试精粹及使用实例(转)

    一:列文件清单 1. List (gdb) list line1,line2 二:执行程序 要想运行准备调试的程序,可使用run命令,在它后面可以跟随发给该程序的任何参数,包括标准输入和标准输出说明符 ...