日期:2014-05-17  浏览次数:21017 次

尝尝C#的语法糖(自动属性/匿名方法/Lamda表达式等)-小心蛀牙!

语法糖意指那些没有给计算机语言添加新功能,而只是对人类来说更“sweet”的语法,意在使得编程风格更易读。C#2.0,3.0发布的新特性,除了泛型不是语法糖,其他所有的新特性几乎都是语法糖。

-但初学者往往因为不了解这些语法糖,从而在阅读代码的时候,难以理解其真正的运作方式。最著名的莫过于Lamda表达式,第一次看到它,很多人都会顶个大问号把。。。

-文章前面会伴随一些让人看着想吐槽的代码,请大家自行河蟹。然后我们会介绍一些语法糖来润色一下,方便初学者们知道这些语法糖的原始意义。

  我们来做一个List<T>类的练习。我会写一个很蛋疼的例子(尽量不用语法糖,当然这很难避免)。首先我定义了一个学生类

public class Student
{
    private string num;
    public string Num { get { return num; } }
    private string name;
    public string Name { get { return Name; } }
    public Student(string num, string name)
    {
        this.num = num;
        this.name = name;
    }
    public override string ToString()
    {
        return num + ":" + name;
    }
}

  现在练习下List<T>的FindAll()方法,它的声明如下

public T FindAll(Predicate<T>match)

  FindAll方法把Predicate<T>作为参数,Predicate<T>是一个委托,它引用一个谓词方法-返回布尔值的方法。如果谓词返回true,表示有一个匹配。

  所以我写了一个FindStudent类来定义谓词。这个方法用要搜索的学生的学号来初始化,FindPredicate()接收一个student对象,比较student对象的学号与构造函数中设置的学号,返回true or false。

 public class FindStudent
    {
        private string num;
        public FindStudent(string num)
        {
            this.num = num;
        }
        public bool FindPredicate(Student student)
        {
            return student.Name== Name;
        }
    }

  最后在一个控制台程序里搜索名字叫John的学生。

  class Program
    {
        static