学习Linq之前必须知道的几种语法糖

» 引用百度解释: 语法糖(Syntactic sugar),也译为糖衣语法,是由英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语,指计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。通常来说使用语法糖能够增加程序的可读性,从而减少程序代码出错的机会。

  » 用一句话来简单描述:给我们带来方便的快捷写法,编译器会帮我们做转换,而且可以提高开发编码的效率,在性能上也不会带来损失

  » c#有很多种语法糖,接下来主要来讲一下与Linq有关的一些语法糖(Lambda表达、自动属性、扩展方法、var、对象或集合初始化器、匿名类等)

  1、Lambda表达式已经在上上一篇单独讲过它的演变由来https://www.cnblogs.com/lxshwyan/p/10815138.html

  2、扩展方法在上一篇分三个部分讲过(在C#3.0之前没有扩展方法的状态(或者你不会使用不知道扩展方法的时候)、扩展方法的语法及怎么使用、怎么正确的使用扩展方法)https://www.cnblogs.com/lxshwyan/p/10815731.html 

  3、自动属性

   之前我们封装属性快捷键:Ctrl+R+E =>弹出封装好的属性

   自动属性快捷键:输入字母 PROP+按两次Tab      

复制代码
///
/// 封装属性
///
private string _userName;
public string UserName
{
get { return _userName; }
set { _userName = value; }
}
///
/// 自动属性
///
public string Password { get; set; }
复制代码
自动属性和封装属性相比没有从功能上没有区别,也能对set或get属性进行访问控制

复制代码
///
/// 封装属性
///
private string _userName;
public string UserName
{
get { return _userName; }
protected set { _userName = value; }
}
///
/// 自动属性
///
public string Password { get; protected set; }
复制代码
4、对象初始化器({})

      之前我们对一个对象赋赋初始值的时候必须这样写

        UserInfo user1 = new UserInfo();
        user1.UserName = "lxsh";
        user1.PassWord = "123456";
        user1.Age = 25;
        user1.Gender = 1;

现在使用对象初始化器后,可以这样写,但使用对象初始化器的对象必须有一个无参的构造函数

复制代码
//属性之前必须用逗号隔开,最后一个逗号可以省略
UserInfo user2 = new UserInfo()
{
UserName = “lxsh”,
PassWord = “123456”,
Age = 25,
Gender = 1,
};
复制代码
5、集合初始化器和对象初始化器类似({})

复制代码
//之前我们使用集合对集合給初始化值的时候,只能一个一个add
List userInfos1 = new List();
userInfos1.Add(new UserInfo() { UserName = “lxsh” });
userInfos1.Add(new UserInfo() { UserName = “wy” });
userInfos1.Add(new UserInfo() { UserName = “ly” });

        //现在使用集合初始化器的,可以不必声明定义单个对象
        List<UserInfo> userInfos2 = new List<UserInfo>()
        {
            new UserInfo() { UserName = "lxsh" },
            new UserInfo() { UserName = "wy" },
            new UserInfo() { UserName = "ly" } 
        };

复制代码
6、匿名类型(Var)

      C#var和JS里面var含义不一样,它有以下几个特点:

      √ 它必须是定义的时候必须初始化值,不然会报错(不能其他类型一样先定义后赋值)

      √ 一旦初始化值后,它已经隐使推导出该变量类型,不能再给他赋值其他类型的值

      √ 它是局部变量,不能有public等其他访问修饰符

      √ 它类似object,但不同于object;它在效率上和使用强类型方式定义变量完全一样

           var i=0;与int i=0;其实就是一样,编译器自动会把var i=0变成int i=0(所以它在编译过程中转换的,没有装箱拆箱的过程,和object不一样)

    7、匿名类new{}

       匿名类在linq选择指定类型返回数据 select new { Name = "lxsh" + s.StudentName, Age = s.Age } 及与返回接收匿名类型var经常会一起使用

 简单讲有时我们需要类似上面返回的数据,在以前如果没有匿名类我们只能单独定义一个类来封装Name、Age的属性类,来接收这些数据,但这样类型数据我们可能只在当前程序中使用,不需要项目间重用,只在这一个地方使用, 单独定义一个类显然比较麻烦,如果我们想增加属性还得再去修改该类,这样显然比较麻烦,影响效率;

 现在有了匿名类型,我们就不需要单独定义一个类来封装我们想要的属性;

var student = new { name = “lxsh”, age = 18 };
Console.WriteLine(student.name);
Console.WriteLine(student.age);
当我们想对student多加一个性别属性时 只需要简单修改就可以

var student = new { name = “lxsh”, age = 18,gender=1 };
Console.WriteLine(student.name);
Console.WriteLine(student.age);
Console.WriteLine(student.gender);
8、内置泛型委托Action(不能有返回值)

 Action一共有16种泛型委托,从一个参数到16个参数的无返回值委托

9、内置泛型委托Func<T>(有返回值) 

   Func一共有16种泛型委托,从一个参数到16个参数的有返回值委托 

Action、Func其实就是C#帮我们封装了有返回值和无返回值的委托类型,我们不需要单独去定义委托类型,用的时候只需实例化就可以 ,在这以前我们每次用委托还要单独去创建委托类型,

-------了解了以上知识接下来我和大家一起来学习一下Linq语法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值