C#语法糖大汇总
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换;而且可以提高开发编码的效率,在性能上也不会带来损失。这让java开发人员羡慕不已,呵呵。
1. 经过简化的Property
早些时候我们这样声明Property
|
1
2
3
4
5
6
7
8
9
10
11
|
private string _myName;public string MyName{ get { return _myName; } set { _myName = value; }} |
千篇一律的这样声明,没有多大意义,于是C#的设计人员将这个千篇一律的工作交给了编译器帮我们做了,我们现在可以这样声明
|
1
|
public string MyName { get; set; } |
当然他不会牺牲灵活性,我们可以单独给get或者set设定访问限制符,例如
|
1
|
public string MyName { get; protected internal set; } |
2. 经过两次变异的委托写法
在.net 1.1时我们不得不声明方法后才在委托中使用,在.net 2.0之后我们可以使用匿名委托,他不单可以简化写法,还可以在匿名委托中访问范围内的变量;再后来拉姆达表达式来了,写法就更简便了。
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
class MyClass{ public delegate void DoSomething(int a); //定义方法委托 private void DoIt(int a) { Console.WriteLine(a); } private void HowtoDo(DoSomething doMethod,int a) { doMethod(a); } public static void Main(string[] args) { MyClass mc = new MyClass(); //调用定义的方法委托 mc.HowtoDo(new DoSomething(mc.DoIt), 10); int x = 10; //使用匿名委托 mc.HowtoDo(delegate(int a){ Console.WriteLine(a + x); },10); //使用lamda表达式 mc.HowtoDo(a=>Console.WriteLine(a+x),10); Console.ReadLine(); }} |
3. 集合类的声明
之前我们声明一个List并给list赋初始值,必须得这么写:
|
1
2
3
4
|
List<string> list = new List<string>();list.Add("a一");list.Add("b二");list.Add("c三"); |
现在不需要了,直接写就可以了
|
1
2
3
|
List<string> list = new List<string> { "def","OK"}; |
4. 集合类各个项的操作
我们为了逐个处理集合中的项,需要这么写:
|
1
2
3
4
|
foreach (string item in list){ Console.WriteLine(item);} |
现在不需要了,这样就可以了
|
1
|
list.ForEach(a => Console.WriteLine(a)); |
代码是不是清爽了很多。
5. using == try finally
为了在使用完毕时释放资源,我们经常要用using,using实质上就是try fiannaly的一个语法糖而已。例如
|
1
2
3
4
5
6
7
8
9
|
StreamWriter sw = null;try{ sw = new StreamWriter("d:\abc.txt"); sw.WriteLine("test");}finally { if(sw!= null) sw.Dispose();} |
上面的代码可以简化为:
|
1
2
3
|
using (var sw = new StreamWriter("d:\abc.txt")) { sw.WriteLine("test");} |
6. 可爱的var
var的意义时不必写声明的类型,编译器会根据后面对var的赋值判断它的类型,var的类型一旦确认就不能再改变,它只能作为局部变量使用,不能用做字段也不能用做参数声明。
例如:
|
1
|
var writer = new StreamWriter(path); |
|
1
|
for(var i=0;i<100;i++){} |
7. 问号的演变
老掉牙的一个问号+冒号
|
1
2
|
var b = 3;var a = b > 9?b.ToString():”0”+b; |
新宝宝两个问号 ??,它表示左边的变量如果为null则值为右边的变量,否则就是左边的变量值
|
1
2
|
string a = null;var b = a??””; |
8. 类型实例化的语法糖
|
1
2
3
4
5
6
7
8
|
public class Abc{ public int ID { get; set; } public string Name { get; set; } public string Url { get; set; }} |
我们没有为上面的类声明构造函数,但是我们可以像下面的形式来实例化它
|
1
2
3
4
5
6
7
|
public static void Main(string[] args) { var abc = new Abc{ ID=1, Name="yukaizhao", Url="http://yukaizhao.cnblogs.com/" }; } |
9. 传说中的扩展方法
在c#3.5时引入了扩展方法,我们可以在不修改类源码的情况下给类增加实例方法,这个很有意义。它的实质也是一种语法糖的实现
例如我们给String类扩展一个IsNumber的方法:
|
1
2
3
4
5
6
7
8
9
10
11
|
public static class StringExt { static private Regex regexNumber = new Regex("\\d+"); static public bool IsNumber(this string input) { if (string.IsNullOrEmpty(input)) { return false; } return regexNumber.IsMatch(input); }} |
我们可以在String实例上调用这个方法了
|
1
2
|
var abc = “123”;var isNumber = abs.IsNumber(); |
10.使用匿名类
|
1
2
3
|
var a = new { ID = 1,Name=”yukaizhao”,BlogUrl=”http://www.cnblogs.com/yukaizhao/”}; |
匿名类在linq to sql或者entity framework中返回查询数据时很好用。
如果大家还有更多的语法糖,欢迎分享。同时希望大家享受语法糖,因为他可以给我们带来方便,请不要对它嗤之以鼻,也没必要对它嗤之以鼻。
C#语法糖大汇总的更多相关文章
- C#语法糖大汇总【转发】
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1. ...
- C#语法糖(Csharp Syntactic sugar)
目录 一.C#语法糖大汇总 1. 经过简化的Property2. 经过两次变异的委托写法3. 集合类的声明4. 集合类各个项的操作5. using == try finally6. 可爱的var7. ...
- C#语法糖(Csharp Syntactic sugar)大汇总
首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...
- C#开源系统大汇总(个人收藏)
C#开源系统大汇总 一.AOP框架 Encase 是C#编写开发的为.NET平台提供的AOP框架.Encase 独特的提供了把方面(aspects)部署到运行时代码,而其它AOP框架依赖 ...
- 【Unity3D游戏开发】之利用语法糖添加自定义拓展方法(下) (十八)
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1. ...
- ECMAScript5新增对象语法糖getter和setter
在新的ECMAScript5中新添加了两个语法糖,这两个语法糖是这样的. var obj = (function(){ var num = 10; return { get n(){ return n ...
- C#语法糖
首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1. ...
- android app性能优化大汇总(内存性能优化)
转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! 写在最前: 本文的思路主要借鉴了2014年AnDevCon开发者大会的一个演讲PPT,加上 ...
- ANDROID内存优化——大汇总(转)
原文作者博客:转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! ANDROID内存优化(大汇总——上) 写在最前: 本文的思路主要借鉴了20 ...
随机推荐
- Solr_全文检索引擎系统
Solr介绍: Solr 是Apache下的一个顶级开源项目,采用Java开发,它是基于Lucene的全文搜索服务.Solr可以独立运行在Jetty.Tomcat等这些Servlet容器中. Solr ...
- 札记:android手势识别,MotionEvent
摘要 本文是手势识别输入事件处理的完整学习记录.内容包括输入事件InputEvent响应方式,触摸事件MotionEvent的概念和使用,触摸事件的动作分类.多点触摸.根据案例和API分析了触摸手势T ...
- 通过Jexus 部署 dotnetcore版本MusicStore 示例程序
ASPNET Music Store application 是一个展示最新的.NET 平台(包括.NET Core/Mono等)上使用MVC 和Entity Framework的示例程序,本文将展示 ...
- 探索C#之6.0语法糖剖析
阅读目录: 自动属性默认初始化 自动只读属性默认初始化 表达式为主体的函数 表达式为主体的属性(赋值) 静态类导入 Null条件运算符 字符串格式化 索引初始化 异常过滤器when catch和fin ...
- MVC Core 网站开发(Ninesky) 2.1、栏目的前台显示(补充)
在2.1.栏目的前台显示中因右键没有添加视图把微软给鄙视了一下,后来有仔细研究了一下发现应该鄙视自己,其实这个功能是有的,是自己没搞清楚乱吐糟. 其实只要在NuGet中安装两个包(Microsoft. ...
- Xamarin+Prism开发详解五:页面布局基础知识
说实在的研究Xamarin到现在,自己就没设计出一款好的UI,基本都在研究后台逻辑之类的!作为Xamarin爱好者,一些简单的页面布局知识还是必备的. 布局常见标签: StackLayout Abso ...
- C# 实时折线图,波形图
此Demo是采用VS自带的Chart图表控件,制作实时动态显示的折线图,和波形图. 涉及到知识如下: Chart 控件,功能强大,可以绘制柱状图,折线图,波形图,饼状图,大大简化了对图的开发与定制. ...
- iOS从零开始学习直播之3.美颜
任何一款直播软件都必须进行美颜,不然哪来的那么多美女,所以技术改变世界,不只是说说而已.美颜在采集的时候就得就行,让主播实时看到直播的效果. 1.美颜原理 其实美颜的本质就是美白和磨皮,分别通 ...
- Win7安装MySQL-5.7.16过程
1.在C盘新建MYSQL文件夹:2.将mysql-5.7.16-winx64拷贝到C:\MYSQL文件夹下,更名为mysql-5.7.16:3.在mysql-5.7.16目录下,建my.ini文件,内 ...
- 在UPDATE中更新TOP条数据以及UPDATE更新中使用ORDER BY
正常查询语句中TOP的运用: SELECT TOP 1000 * FROM MP_MemberGrade 随意更新一张表中满足条件的前N条数据: UPDATE TOP (1) MP_Member ...