• 自动属性,对象初始化器,集合初始化器和lambda表达式


    C#在2.0以后进入了一些新特性,如 自动属性,对象初始化器,集合初始化器和lambda表达式,另外还包括匿名方法、可空类型和扩展方法等。
    详细见我2007年的文章,现测试几个初始化器在语法层面和reflector以后对比,可发现哪些是语法甜点,那些是CLR内置的改进。

    1.自动属性:AutoProperty
               直接给出类内属性field的名称,后面跟{},并在内部简单写get; set;即可。 编译器将自动创建私有属性字段,并实现get_属性名称和 set_属性名称method,属于编译器语法甜头。

    public string FirstName{get;set;}

    2.对象初始化器:Object Initilizer
                简单讲就是可以在对象初始化的时候直接完成其属性的赋值。语法是在new 对象后紧跟{},并在{}内部设置属性的名称并赋值。
    new Student{FirstName="Sophie", LastName="UX",Corperation="ibm"}
    3.集合初始化器:Collection Initilizer
               语法上在集合类型实例化语句New后面紧跟{},并在{}内填写元素.

    double[] score = {98.5, 93.5, 99, 65.5}; float[] mesure = new float[]{98.5f, 93.5f, 99f, 65.5f};

    4.lambda表达式: lambda expression

    详细见下面的代码吧

    //csc Initializer.cs /r:System.Linq.dll
    using System;
    using System.Linq;
    using System.Collections.Generic;

    public class Student
    {//auto property
        public string FirstName{get;set;}
        public string LastName{get;set;}
        public string Corperation{get;set;}
    }


    public class MyClass
    {
        public static void Main()
        {    //List    Generic
            List<Student> students = new List<Student>{//Collection Initializer
                new Student{FirstName="xu", LastName="Minghui", Corperation="LYPOWER"},
                new Student{FirstName="Sophie", LastName="UX",Corperation="ibm"},
                new Student{FirstName="xu", LastName="zisheng", Corperation="Home"}
                //Object Initializer: give property value directly in a {} scope
            };
            
            var result1 = students.Where( p => p.FirstName.StartsWith("xu") );
            var result2 = from  stu in students where stu.FirstName.StartsWith("xu"select stu;
            foreach(var v in result1)
                Console.WriteLine("{0} {1} work at {2}.", v.FirstName, v.LastName, v.Corperation);
            foreach(var v in result2)
                Console.WriteLine("{0} {1} work at {2}.", v.FirstName, v.LastName, v.Corperation);
            Console.ReadKey();
        }
    }
    /*
    public static void Main()
    {
        List<Student> list2 = new List<Student>();
        Student item = new Student {
            FirstName = "xu",
            LastName = "Minghui",
            Corperation = "LYPOWER"
        };
        list2.Add(item);
        Student student3 = new Student {
            FirstName = "Sophie",
            LastName = "UX",
            Corperation = "ibm"
        };
        list2.Add(student3);
        Student student4 = new Student {
            FirstName = "xu",
            LastName = "zisheng",
            Corperation = "Home"
        };
        list2.Add(student4);
        List<Student> list = list2;
        IEnumerable<Student> enumerable = from p in list
            where p.FirstName.StartsWith("xu")
            select p;
        IEnumerable<Student> enumerable2 = from stu in list
            where stu.FirstName.StartsWith("xu")
            select stu;
        foreach (Student student in enumerable)
        {
            Console.WriteLine("{0} {1} work at {2}.", student.FirstName, student.LastName, student.Corperation);
        }
        foreach (Student student in enumerable2)
        {
            Console.WriteLine("{0} {1} work at {2}.", student.FirstName, student.LastName, student.Corperation);
        }
        Console.ReadKey();
    }
    */



               

  • 相关阅读:
    [Project Euler] Problem 58
    [Project Euler] Problem 59 Decrption
    [Project Euler] Problem 57
    VS2010 + WinDDK 搭建驱动开发环境
    利用C++模板特性计算各整数类型的最大最小值
    虚表的那些事儿
    ModuleNotFoundError: No module named 'pip._vendor.six'
    OpenCVPython系列之单应性查找对象理论篇
    OpenCVPython系列之背景分离
    OpenCVPython系列之Shi—tomasi拐角检测器
  • 原文地址:https://www.cnblogs.com/flaaash/p/3051274.html
Copyright © 2020-2023  润新知