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# 中的扩展方法

还有这个博客,扩展方法的运用【扩展方法的运用

其实我对扩展方法的理解,就是一个特殊的工具类,只不过和类型绑定在一起了。这只是我暂时的理解,因为还没涉及到底层。

【未完待续】

回到主页

时间: 2024-10-13 03:16:29

C# 中的语法糖的相关文章

JVM(二):Java中的语法糖

JVM(二):Java中的语法糖 上文讲到在语义分析中会对Java中的语法糖进行解糖操作,因此本文就主要讲述一下Java中有哪些语法糖,每个语法糖在解糖过后的原始代码,以及这些语法糖背后的逻辑. 语法糖 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用.通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会.

【Java基础】Java中的语法糖

目录 Java中的语法糖 switch对String和枚举类的支持 对泛型的支持 包装类型的自动装箱和拆箱 变长方法参数 枚举 内部类 条件编译 断言 数值字面量 for-each try-with-resource Lambda表达式 Lambda表达式的语法 基本的Lambda例子(实现功能接口) 使用Lambdas排序集合 使用Lambdas和Streams 字符串对+号的支持 参考 语法糖(Syntactic Sugar),也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言本身

看看C# 6.0中那些语法糖都干了些什么(终结篇)

终于写到终结篇了,整个人像在梦游一样,说完这一篇我得继续写我的js系列啦. 一:带索引的对象初始化器 还是按照江湖老规矩,先扒开看看到底是个什么玩意. 1 static void Main(string[] args) 2 { 3 Dictionary<string, string> dic = new Dictionary<string, string>() 4 { 5 ["Name"] = "ctrip", 6 ["Age&qu

看看C# 6.0中那些语法糖都干了些什么(中篇)

接着上篇继续扯,其实语法糖也不是什么坏事,第一个就是吃不吃随你,第二个就是最好要知道这些糖在底层都做了些什么,不过有一点 叫眼见为实,这样才能安心的使用,一口气上五楼,不费劲. 一:字符串嵌入值 我想String.Format方法就是化成灰大家都认识,比如下面代码: 1 class Bird 2 { 3 private string Name = "swallow"; 4 5 public void Fly() 6 { 7 var result = string.Format(&quo

看看C# 6.0中那些语法糖都干了些什么(上篇)

今天没事,就下了个vs2015 preview,前段时间园子里面也在热炒这些新的语法糖,这里我们就来看看到底都会生成些什么样的IL? 一:自动初始化属性 确实这个比之前的版本简化了一下,不过你肯定很好奇,到底编译器给我们做了哪些东西呢? 1 class Student 2 { 3 public string Name { get; set; } = "ctrip"; 4 } 从这张图中可以看到,在ctor中<Name>k__backingfield=“ctrip“的赋值在b

Java 中的语法糖

定义:指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会:但是这种语法对语言的功能并没有影响.Java中的泛型,变长参数,自动拆箱/装箱,条件编译等都是 泛型:ava的泛型只在源代码存在,只供编辑器检查使用,编译后的字节码文件已擦除了泛型类型 public static void main(String[] args) { List<String> stringList = new ArrayList<String&g

vue项目中快捷语法糖

1.Vue.js是渐进式框架,采用自底向上增量开发的设计基于MVVM思想. 2.Vue 完全有能力驱动采用单文件组件和Vue生态系统支持的库开发的复杂单页应用. 3.Vue.js 的目标是通过尽可能简单的 API 实现响应的数据绑定和组合的视图组件. 4.指令带有前缀 v-,以表示它们是 Vue.js 提供的特殊属性. 5.站点上动态渲染的任意 HTML 可能会非常危险,因为它很容易导致 XSS 攻击. 6.请只对可信内容使用 HTML 插值,绝不要对用户提供的内容插值. 7.当一个 ViewM

Java中的10颗语法糖

语法糖(Syntactic Sugar):也称糖衣语法,指在计算机语言中添加的某种语法,这种语法对语言的功能没有影响,但是更方便程序员使用.通常来说,使用语法糖能够增加程序的可读性,减少程序代码出错的机会. 相对于C#及许多其他JVM来说,Java在现代编译语言之中属于“低糖语言”.尤其是JDK1.5之前的版本,“低糖”语法也是java语言被怀疑已经“落后”的一个表现方面. 在Javac的源码中,解语法糖的过程由desugar()方法触发,在com.sun.tools.javac.comp.Tr

java中的12个语法糖

01 switch 支持 String 与枚举 从 Java 7 开始,Java 语言中的语法糖在逐渐丰富,其中一个比较重要的就是 Java 7 中 switch 开始支持 String. 在开始 coding 之前先科普下,Java 中的 swith 自身原本就支持基本类型.比如 int.char 等. 对于 int 类型,直接进行数值的比较.对于 char 类型则是比较其 ascii 码. 所以,对于编译器来说,switch 中其实只能使用整型,任何类型的比较都要转换成整型.比如 byte.