博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自动属性,对象初始化器,集合初始化器和lambda表达式
阅读量:6642 次
发布时间:2019-06-25

本文共 2773 字,大约阅读时间需要 9 分钟。

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();
}
*/

           

转载于:https://www.cnblogs.com/flaaash/archive/2013/04/29/3051274.html

你可能感兴趣的文章
新瓶如何和平改造老酒?(野生项目笔记01)
查看>>
Python实现MySQL DBA小工具一例
查看>>
YodaOS 中是如何生成 API 的?
查看>>
Android 中Fragment的自动重建
查看>>
在 iOS 平台实现Ping 和 traceroute
查看>>
小猿圈python学习-嵌套&匿名&高阶函数
查看>>
element-ui 版本升级对比
查看>>
js 整理
查看>>
OOM
查看>>
Java Socket基础(二)
查看>>
基于Squid3.0的反向代理加速实现
查看>>
我的友情链接
查看>>
Xamarin XAML语言教程Xamarin.Forms中改变活动指示器颜色
查看>>
Jenkins Master/Slave架构
查看>>
[每日短篇] 9 - 去外包公司工作好还是不好?
查看>>
我的友情链接
查看>>
设计模式之创建型模式—— 1.4 单例模式
查看>>
Keepalived无法绑定VIP故障排查经历
查看>>
Linux Shell 程序调试
查看>>
php安装
查看>>