博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
LINQ to Objects系列(1)相关技术准备
阅读量:6917 次
发布时间:2019-06-27

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

  LINQ to Objects是LINQ的一部分,是查询对象集合的一种语法。首先看一下LINQ的体系结构,这样对LINQ有一个大致的了解。如图。image

第一篇文章主要是回顾一下学习LINQ to Objects相关的基础知识,主要分为以下几个方面。

1,隐式类型局部变量

2,匿名类型

3,扩展方法

4,对象初始化器

5,集合初始化器

6,Lambda表达式

隐式类型局部变量

 隐式类型局部变量,从名字中可以得出两层含义,一是隐式类型,即相对于显式类型(或称为强类型)而言的,指不需要指定具体类型,而是由右边表达式推断出的类型。第二层含义是局部变量,指的是只能用于方法内部的局部变量,不能用在字段或方法参数上。隐式类型局部变量通常是用var关键字表示的。演示代码如下。

//原来写法string userName = "James";int age = 29;string[] userList = new string[] { "a","b","c"};foreach (string user in userList){        Console.WriteLine(user);}//现在写法var userName = "mcgrady";var age = 29;var userList = new[] { "a", "b", "c" };foreach (var user in userList){       Console.WriteLine(user);}

匿名类型

匿名类型是C#的一种新特性,通常我们创建类型对象都是通过new关键字再跟上类名来创建的,但是匿名类型却不需要指定类型名称,而是由编译器为我们自动创建一个类型名称,而且不会告诉我们这个类型名称是什么。匿名类型又称为行内类型,通常与var关键字配合使用。演示代码如下。

var data = new { UserName = "mcgrady", Age = "29" };Console.WriteLine("UserName:{0},Age:{1}", data.UserName, data.Age);

扩展方法

扩展方法使我们当我们没有源代码的情形下,仍可以对CLR类型或自定义类型进行一些扩展操作。同时它也是学习LINQ to Objects的基础。另外,扩展方法只能定义在静态类的静态方法中,并且如果扩展方法名不能同原方法名同名,否则扩展方法将会失效。演示代码如下。

public static class StringExtension    {        ///         /// 将当前字符串转换为int        ///         ///         ///         /// 
如果成功则返回字符串的int形式,如果失败则返回默认值
public static int ToInt(this string str, int result = -110) { int value; if (int.TryParse(str, out value)) { return value; } else { return result; } } }//扩展方法调用string str = "111";int result = str.ToInt();

对象初始化器

在没有对象初始化器之前,我们创建一个对象大概需要经过这么两个步骤,首先new一个对象,然后给每个字段赋值。而有了对象初始化器之后,原本需要几行代码才能完成的任务变成一行代码就可以完成,简化了代码,也使代码更优雅。演示代码如下。

//原来写法Person person = new Person();person.UserName = "James";person.Age = 28;//现在写法Person person = new Person { UserName = "James", Age = 28 };Console.WriteLine("UserName:{0},Age:{1}", person.UserName, person.Age);

集合初始化器

使用集合初始化器,编译器会自动帮我们生成Add插入操作,前提是集合实现了IEnumerable接口。同对象初始化器一样,使用集合初始化器增强代码可读性的同时使我们写的代码量更少了。演示代码如下。

//原来写法List
personList = new List
();personList.Add(new Person { UserName = "Wade", Age = 28 });personList.Add(new Person{ UserName="Bosh", Age=25});personList.Add(new Person { UserName = "James", Age = 29 });//现在写法(使用集合初始化器)List
newPersonList = new List
{ new Person{ UserName="Wade", Age=28}, new Person{ UserName="Bosh", Age=25}, new Person{ UserName="James", Age=29}};

Lambda表达式

lambda表达式可以简单地理解为:它是在匿名方法的基础上,再进一步地简化了创建委托实例所需要的代码。后面会有一篇文章专门总结lambda表达式,它的语法格式为:(参数列表) => 表达式或者语句块,下面是一个简单的示例。

//lambda表达式var selectionPerson = newPersonList.Where(p => p.Age > 25).Select(p => p.UserName.ToUpper());foreach (var item in selectionPerson){    Console.WriteLine(item);}

 

转载地址:http://fpxcl.baihongyu.com/

你可能感兴趣的文章
Rabbitmq编程
查看>>
C++虚函数
查看>>
Android记住密码后自动登录
查看>>
python 訪问webservice
查看>>
CSDN开源夏令营 百度数据可视化实践 ECharts(4)
查看>>
SVN 初试
查看>>
安装edX DevStack
查看>>
避开Unity的坑
查看>>
微软Windows Phone今日正式面向中国市场发布
查看>>
bzoj1112 [POI2008]砖块Klo
查看>>
235D Graph Game
查看>>
csu 1984: LXX的能力值
查看>>
汉编随想(一)
查看>>
开源的Android开发框架-------PowerFramework使用心得(五)网络请求HTTPRequest
查看>>
[转载]kmeans
查看>>
一个不错的架构图:基于SpringCloud的微服务项目
查看>>
成为顶尖自由职业者必备的7个软技能之一:沟通(转)
查看>>
获取合并单元格中值的一个方法POI
查看>>
ORACLE Install (10g r2) FOR Red Hat Enterprise Linux Server release 5.5 (64 bit) (转)
查看>>
入手Invicta 8926 OB潜水自动机械腕表
查看>>