C# 中的语法糖
2018-06-22 04:42:18来源:未知 阅读 ()
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);
【未完待续】
【回到主页】
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 详解php中的implements 使用 2020-03-18
- php 中的closure用法详解 2020-03-13
- thinkphp中的多表关联查询的实例详解 2020-02-07
- 如何直接访问php实例对象中的private属性详解 2020-02-07
- PHP中的浅复制与深复制的实例详解 2019-12-29
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash