C# 中的语法糖
1. using 代替了 try…catch…finally
因为之前是学 Java 的,在连接数据库或者进行文件读写操作时很自然的就使用了 try…catch…finally…,在 C# 中这样写也肯定可以但是还有一种更优雅的写法(我看到别人这样说),那就是使用 using 关键字。
在使用各种流或者连接时【文件读写流,数据库连接等等】,在使用完毕后,需要关闭流和连接,(这里不讨论数据库连接需要归还到池子)
之前的代码是这样的:
public void Test1()
{
SqlConnection conn = null;
SqlDataReader reader = null;
try
{
string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString();
conn = new SqlConnection(strConn);
conn.Open();
SqlCommand cmd = conn.CreateCommand();
cmd.CommandText = "XXXXXXXXX";
reader = cmd.ExecuteReader();
//一些操作
}
catch (Exception e)
{
Console.WriteLine("出错啦!!");
}
finally
{
if (conn != null)
{
conn.Close();
conn.Dispose();
}
if (reader != null)
{
reader.Dispose();
}
}
}使用了 using 关键字之后是这样的:
public void Test2()
{
string strConn = ConfigurationManager.ConnectionStrings["strConn"].ToString();
using (SqlConnection conn = new SqlConnection(strConn))
{
using (SqlCommand cmd = conn.CreateCommand())
{
cmd.CommandText = "XXXXXXXXXX";
using (SqlDataReader reader = cmd.ExecuteReader())
{
//一些操作
}
}
}
}关于 using 关键字,有必要弄清楚“托管资源”和“非托管资源”,只有非托管资源才需要使用 using 关键字。
关于非托管资源和托管资源可以看这篇博客【 】
2. 动态对象,字段的省略
还记得在 Java 中写字段的读写方法时,快捷键用的相当的 6 ,那么 C# 中没有与其类似的对象呢,快捷键当然有,不过还有更猛的,就是不用写字段了,只管写读写属性就好,编译器会自动根据读写属性去生成字段。
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string Sex { get; set; }
}编译器在编译时就会自动生成字段,下面是编译过后的 IL代码目录,可以看到最下面生成了三个字段。
3. 两个问号“??”的作用
一个问号见过,在三目元算符里面就是。两个问号呢?
之前见到这样的写法也是比较奇葩的。看代码吧:
public class Program
{
public static void Main(string[] args)
{
string a = null;
var b = a ?? "woaini";
Console.WriteLine("b : " + b);
Console.WriteLine("=============");
a = "msym";
var c = a ?? "woaini";
Console.WriteLine("c: " + c); }
}运行看结果:
结论就是:问号左边的是 null 得话,那么得到就是问号右边的值,反之就是问号左边的值。
4. 扩展方法
这个可以看这个博客【C# 中的扩展方法】
还有这个博客,扩展方法的运用【扩展方法的运用】
其实我对扩展方法的理解,就是一个特殊的工具类,只不过和类型绑定在一起了。这只是我暂时的理解,因为还没涉及到底层。
5. 对象初始化器和匿名对象
这点和 JavaScript 的对象直接量就很像了。
//对象初始化器
Person p = new Person {
Name = "andy",
Age = 24
};
//匿名对象
var p2 = new { Name = "dimo", Age = 24 };
Console.WriteLine(p.Name);
Console.WriteLine(p2.Name);
【未完待续】
【回到主页】
C# 中的语法糖的更多相关文章
- Java 中的语法糖
百度百科对语法糖的定义 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这 ...
- [转]谈谈Java中的语法糖
*该博客转自 http://blog.csdn.net/danchu/article/details/54986442 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某 ...
- JVM(二):Java中的语法糖
JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法 ...
- 浅析java中的语法糖
概述 编译器是一种计算机程序, 它主要的目的是将便于人编写.阅读.维护的高级计算机语言所写的源代码程序, 翻译为计算机能解读.运行的低阶机器语言的程序, 即可执行文件.而 javac 就是java语言 ...
- 【Java基础】Java中的语法糖
目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with- ...
- 看看C# 6.0中那些语法糖都干了些什么(终结篇)
终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(strin ...
- 看看C# 6.0中那些语法糖都干了些什么(中篇)
接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想 ...
- 看看C# 6.0中那些语法糖都干了些什么(上篇)
今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好 ...
- Java中的语法糖
一.范型 1. C#和Java范型的区别 在C#中范型是切实存在的,List<int>和List<String>就是两种不同的类型,它们在系统运行期间生成,有自己的虚方法表和类 ...
- Java 中的语法糖(7/15整个周六上午总结)
语法糖定义指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会:但是这种语法对语言的功能并没有影响.Java中的泛型,变长参数,自动 ...
随机推荐
- fedora/centos下gcc编译出现gcc: error trying to exec ‘cc1plus’: execvp: No such file or directory
fedora/centos下gcc编译出现gcc: error trying to exec 'cc1plus': execvp: No such file or directory解决办法 翻译自: ...
- 前端必备的Nginx学习
由于机缘巧合,认识了一些朋友,给我介绍了搬瓦工的网站.买了一个国外的服务器,既可以FQ又拥有了一个搭载 Centos 6 的服务器.一年19.99美元,折合人民币也就130左右,一键搭建.有兴趣可以点 ...
- 【8086汇编-Day6】关于loop的实验
实验内容 因为是要复制代码,所以常规来做是取代码段地址来用,所以把cs值mov给ax,但是这只是临时的,ax之后还有别的用途,那就把指令当作数据来存(把ax值 mov给ds,表示这一段地址用作代码段, ...
- 使用 Linux 下的的logrotate进行日志的切割
实际生产中,使用一个log文件来记录所有信息的话,一方面,时间过久,就会占用很大的空间:另一方面,就是一个文件记录对于后期日志的查看非常不利.为了解决查看了一下资料,发现linux里面有一个logro ...
- nmap教程(下)
九.脚本引擎 脚本文件存放在/usr/share/nmap/scripts目录下 SCRIPT SCAN: -sC: equivalent to --script=default #启用默认类脚本 - ...
- 北京Uber优步司机奖励政策(3月28日)
滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...
- 回写盘写速度被限速为10M左右
问题现像如下图所示: 用hd-speed等测试虚拟盘速度都能达到90M/s左右,但复制文件到虚拟盘速度最高只有10M/s 原因:由于客户机开机加载这个随机驱动和随机进程后,会对磁盘启动进程等有扫描检查 ...
- CDN 缓存策略(转)
1.CDN加速原理 通过动态域名解析,网友的请求被分配到离自己最快的服务器.CDN服务器直接返回缓存文件或通过专线代理原站的内容. 网络加速+内容缓存,有效提供访问速度 2.CDN节点数量 ...
- typescript语法
先来讲一讲TypeScript出现的背景 前端javascript的编程思想与后端java面向对象的编程思想有很大的不同,微软公司借鉴了coffeescript语言,继承了很多C#和java的编程思想 ...
- 聊聊WS-Federation
本文来自网易云社区 单点登录(Single Sign On),简称为 SSO,目前已经被大家所熟知.简单的说, 就是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统. 举例: 我们 ...