C#中的语法糖
-语法糖,意指那些没有给计算机语言添加新功能,而只是对人类来说更“sweet”的语法,意在使得编程风格更易读。C#2.0,3.0发布的新特性,除了泛型不是语法糖,其他所有的新特性几乎都是语法糖。
-但初学者往往因为不了解这些语法糖,从而在阅读代码的时候,难以理解其真正的运作方式。最著名的莫过于Lamda表达式,第一次看到它,很多人都会顶个大问号把。。。
-文章前面会伴随一些让人看着想吐槽的代码,请大家自行河蟹。然后我们会介绍一些语法糖来润色一下,方便初学者们知道这些语法糖的原始意义。
我们来做一个List<T>类的练习。我会写一个很蛋疼的例子(尽量不用语法糖,当然这很难避免)。首先我定义了一个学生类
public T FindAll(Predicate<T>match)FindAll方法把Predicate<T>作为参数,Predicate<T>是一个委托,它引用一个谓词方法-返回布尔值的方法。如果谓词返回true,表示有一个匹配。
所以我写了一个FindStudent类来定义谓词。这个方法用要搜索的学生的学号来初始化,FindPredicate()接收一个student对象,比较student对象的学号与构造函数中设置的学号,返回true or false。
static void Main(string[] args) { List<Student> Students = new List<Student>() { new Student(){ Num="001", Name="John"},//使用对象初始值设定项初始化对象,代替构造函数 new Student(){ Num="002", Name="Marry"}, new Student(){ Num="003", Name="John"} };//使用集合初始值设定项初始化集合,不用重复调用Add方法 var John = Students.FindAll(s => s.Name == "John");//使用var声明匿名类型,其实John是个List<Student> John.ForEach(j => Console.WriteLine(j));//使用Lamda表达式 Console.ReadKey(); }这样的代码看着就很舒服了。
当然语法糖还有很多,如文章开头所说,C#的新特性大多是语法糖。当然还有一些其他的语法糖,比如三元运算符Test?expression1:expression2就有一个语法糖,写作
expression1??expression2 2选1,expression1为null则执行expression2。反之执行expression1。