### LINQ学习笔记 #### 第一部分:准备工作 ##### 第一章:匿名类型 **1.1 基础介绍** 匿名类型是C#提供的一种特殊类型,它可以在编译时自动生成类,并且该类只能在当前作用域内使用。匿名类型的一个显著特点是它们没有名字,但具有属性。在C#中,我们可以通过`var`关键字来声明匿名类型。 **1.2 var关键字的使用** 例如: ```csharp var str = "Hello world!"; ``` 这里的`var`告诉编译器这是一个变量,而实际类型则由初始化器右侧的表达式推断得出。在这个例子中,`str`的类型被推断为`string`。 **1.3 匿名类型的特性** - **不可修改性**:一旦声明了匿名类型,就无法修改其成员的类型或添加新的成员。 - **相等性的判断**:两个匿名类型的相等性不仅取决于它们的成员是否相等,还取决于这些成员的声明顺序、数量、类型以及名称是否完全相同。 **1.4 初始化器语法** - **数组初始化器**:用于创建并初始化数组。 ```csharp var ints = new int[] { 1, 2, 3 }; ``` - **对象初始化器**:用于创建并初始化具有指定属性的对象。 ```csharp var person = new { name = "三哥", age = 22 }; ``` **1.5 匿名函数** 匿名函数是在运行时创建的函数,通常用于传递到其他方法中作为参数。C#中的匿名函数有两种形式:匿名方法和Lambda表达式。例如: ```csharp Func<string, string, string> myFun = delegate(string i, string j) { return i + "," + j; }; ``` 这里定义了一个接受两个字符串参数并返回字符串的匿名函数。 **1.6 使用using语句** `using`语句是一种更简洁的方式来处理实现了`IDisposable`接口的对象,确保在使用完毕后能够正确地释放资源。例如: ```csharp using (var cnn = new SqlConnection("")) { cnn.Open(); Console.WriteLine(cnn.State); } ``` **1.7 匿名类型的相等性** 两个匿名类型被认为是相同的,如果它们具有相同的成员声明顺序、成员数量、成员投影类型以及成员名称。对于实例的比较,应使用`Equals`方法: ```csharp var personA = new { name = "张三", age = 22 }; var personB = new { name = "张三", age = 22 }; bool isEqual = personA.Equals(personB); ``` **1.8 LINQ查询与匿名类型** LINQ查询与匿名类型结合使用可以极大地简化数据处理。例如: ```csharp var ints = new int[] { 1, 2, 3, 4, 5 }; var query = from i in ints where i > 2 select new { name = i }; foreach (var v in query) { Console.WriteLine(v.name); } ``` 这段代码展示了如何使用匿名类型来存储LINQ查询的结果。 ##### 第二章:复合类型初始化 **2.1 复合类型的定义** 复合类型是指由多个数据项组成的数据类型,例如类、结构体等。通过初始化复合类型,我们可以直接设置类或结构体的成员值。 **2.2 类型初始化示例** 例如: ```csharp public class Person { public string Name { get; set; } public int Age { get; set; } } var person = new Person { Name = "三哥", Age = 22 }; ``` **2.3 返回复合类型的方法** 我们也可以通过方法返回复合类型: ```csharp public Person GetPerson() { return new Person { Name = "小妹", Age = 20 }; } ``` **2.4 OfType方法与Cast方法** - **OfType<T>()**:此方法仅返回集合中满足指定类型的元素。 - **Cast<T>()**:与`OfType<T>()`类似,但是当尝试转换失败时会抛出异常。 - **AsEnumerable()**:使对象表现得像一个可枚举的集合。当对象实现了与`IEnumerable`相似的方法时,可以显式指定使用哪个版本的方法。 例如: ```csharp var mixedList = new object[] { 1, 2, "three", 4, "five" }; var intList = mixedList.OfType<int>(); foreach (var item in intList) { Console.WriteLine(item); } ``` 以上是对LINQ学习笔记中提到的一些关键概念和用法的详细解释。通过这些知识点的学习,可以帮助开发者更好地理解并应用匿名类型、匿名函数、复合类型初始化等相关技术,在开发过程中实现更为高效和优雅的代码编写。
- 粉丝: 1w+
- 资源: 806
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助