时间:2024/2/19来源:本站原创作者:佚名
白癜风怎么得 http://m.39.net/baidianfeng/a_4394583.html

作为.Net栈的主力编程语言,C#有很多比较方便的语法糖可以使用,语法糖指的是编程语法中为了方便程序员减少代码编写过程中一些比较繁复的过程,或者目的只是为了减少代码量,使代码可读性更好一些。本文举例一些在C#中比较常见的语法糖,掌握这些基础的语法糖,能够解决一些平时编码时比较头疼的问题!字符串格式化

字符串格式化

“”符号,是C#引入的一种新的字符串格式方法,在此之前,常见的字符串格式化方式只有String.Format方法,就是根据占位符的索引方式给字符串里需要插入的地方赋值。

就像这样:

虽然String.Format已经足够方便了,可如果一个字符串的长度比较长,或者需要频繁改动字符串占位符的位置,String.Format会让人很头疼。经常遇到的问题就是,占位符索引所代表的值变了,我们还得去找到对应索引处的变量,将其位置也进行改变,很不方便。

而“”符号则完美解决了这个问题。

下面请看代码和运行结果:

是不是很方便?不管字符串中的文本怎么变,我们只需要关心某个位置的花括号中变量的位置,不需要因此挪动其他地方的变量位置。

除此之外,“”符号还有一些方便的用法支持,比如我们常用的日期格式化,如下代码:

常用的字符串格式化用法基本就这两种,“”符号所支持的字符串格式化方式还不止这些,有兴趣的同学可以自行探索。

定义属性

我们一般在定义一个实体雷的时候,如果外部需要访问类中的私有字段的时候,一般情况下,我们可以使用公开属性、私有变量的方法。这也是很多编程语言定义公开属性的通用做法,就像下面代码中表示的一样。

但是在C#中,我们可以直接定义一个带访问器的属性,不需要再定义私有变量!

有人可能会质疑,这么写的话,不符合面向对象编程的思想,即封装的思想。其实,在C#里。不管是私有变量公开属性,还是直接写带访问器的公开属性,本质上都是一样的,在编译以后,两者其实并无区别,后者会被编译成前者那样的写法。

当然,这仅仅是对于那些不需要在变量读、写的时候,需要对变量进行特殊处理的字段,如果需要对变量在读、写时进行判断处理的,还是用私有变量、公开属性的方法更加适合一点。

再次重申下,上述两种写法,在代码编译后并无区别!

代码作用域

像If语句,for循环语句、我们都知道,在执行的时候会先执行括号里面的东西,再执行花括号里面的东西。但是,和其他一些编程语言一样,C#也提供了简易写法,当花括号里面的执行代码只有一行的时候,可以省略花括号。

但是,需要注意的是,当省略花括号后,通常的写法是要在执行的代码行前面加个缩进,虽然不缩进不影响代码执行,但很容易被人误以为该代码行是在if语句或者for循环之外的。

尽管C#支持省略花括号进行简写,但是很多人并不建议这么用,甚至很多公司专门出规定禁止这么使用,因为这可能会导致一些比较严重的问题。

比如说,当后期if语句或者for循环中所需要执行的代码行数超过1行的时候,余下的代码想要正确执行,那么就必须加花括号了。但是,因为使用的是简写,因此可能会出现忘记加花括号的情况,导致第2行代码没有在指定的作用域内执行。通常这种情况如果第2行代码没有报错的情况下,就会导致程序往错误的方向执行而不被发现。

这里展示了一段错误代码:

所以,虽然当if语句和for循环语句中执行的代码行数只有一行的时候可以省略花括号,但我并不建议这么写,因为可能在未来拓展代码的时候出现问题。

另外一个和代码作用域相关的语法糖,也和花括号有关系。

有时候我们需要频繁使用同一种意义的变量名的时候,可能就会出现变量名起名的困扰,比如说“name”、“name1”、“name2”……

并且,有时候我们不想在一个代码作用域中,某段代码和其他代码有过多纠结,这时候我们就可以让代码在封闭的环境中单独执行,此时就用到了C#中的花括号。

正如上面所说,if和for循环若加了花括号,那么花括号就是if语句和for循环的作用域。可是,如果我们单独使用花括号把一段代码给包住的话,那么这段代码的作用域就被缩小了。

就像图片里所看到的一样,“num2”变量的作用域是在花括号里面的,此时在花括号外面调用“num2”这个变量是找不到的,因此出现了编译错误。但是,“num”这个变量处于花括号作用域的外面,因此,“num”变量的作用域是要大于“num2”这个变量的,因此在花括号里面调用“num2”变量,是不会出现编译错误的!

因此,某些情况下,我们希望某段代码封闭执行,就可以直接使用花括号将代码给包住,这在C#里面是允许的。

三元运算符

三元运算符又称“三目运算符”或者“条件运算符”,其实就是if-else的简写,语法格式为:

条件?条件成立后执行的代码:条件不成立后执行的代码

这么看是不是跟if语句的逻辑一模一样呢?就比如下面这段代码,以及代码执行结果:

简单的说,条件成立后执行问号后面的,不成立则执行冒号后面的,是不是特别简单?

但是,如果判断条件过多,或者有多层判断的时候,此时就不建议使用三元运算符了,因为这会让代码结构看起来很乱,可读性很差!

就比如下面这段代码:

这段代码其实约等于如下代码:

相比使用三元运算符,使用if-else或者switch-case可读性更好一些。

匿名类型

有时候,我们需要简单结构化一些数据,但是又不想定义一个用来结构化数据的实体类或者结构体,通常的做法,我们可能会定义一个object数组,将对应数据放到数组中,然后通过下标去获取数组中对应的数据,或者使用键值对数组来传递数据,实现方法还是挺多的,当然缺点也挺多,比如说object数组和键值对数组在数据类型不一样的时候,取值后还需要对值进行转换。此时,匿名类型的优势就体现出来了。

匿名类型,顾名思义,它不像实体类或者结构体一样,拥有名称,其实就是一个简单的可以定义复杂数据类型的变量。

匿名类型里面的字段只有在赋值的时候,类型才会确定下来,因此对数据类型并不敏感。

下面通过一段简单的代码来了解匿名类型:

我们可以很清楚得看到,在定义匿名类型时,我们直接“new”了一个不带任何类型的对象出来,这个对象由花括号组成,对象里面的字段名可以随意取。而在外部调用的时候,我们也可以通过对象取出所定义的字段的值。

总结

C#中可供使用的语法糖有很多,简单的像var这种隐式类型声明方式,复杂的像Lambda表达式,要么太简单要么太复杂,这里就不过多阐述了,大家可以自己查找资料学习如何使用。

但是,语法糖在给予我们编码便利的同时,可能也会带来一些代码风险,因此我们要学会灵活运用,关键看我们在写代码时是否细心,毕竟有个道理叫作“事在人为”嘛!


转载请注明原文网址:http://www.helimiaopu.com/cxtx/cxtx/13036.html
------分隔线----------------------------