C#基础提升系列——C# LINQ】的更多相关文章

C# LINQ LINQ(Language Integrated Query,语言集成查询).在C# 语言中集成了查询语法,可以用相同的语法访问不同的数据源. 命名空间System.Linq下的类Enumerate中定义了许多LINQ扩展方法,用于可以在实现了IEnumerable<T>接口的任意集合上使用LINQ查询. 扩展方法 C#扩展方法在静态类中声明,定义为一个静态方法,其中第一个参数定义了它扩展的类型,扩展方法必须对第一个参数使用this关键字. public static clas…
C#异步编程 关于异步的概述,这里引用MSDN的一段文字: 异步编程是一项关键技术,使得能够简单处理多个核心上的阻塞 I/O 和并发操作. 如果需要 I/O 绑定(例如从网络请求数据或访问数据库),则需要利用异步编程. 还可以使用 CPU 绑定代码(例如执行成本高昂的计算),对编写异步代码而言,这是一个不错的方案. 异步代码具有以下特点: 等待 I/O 请求返回的同时,可通过生成处理更多请求的线程,处理更多的服务器请求. 等待 I/O 请求的同时生成 UI 交互线程,并通过将长时间运行的工作转换…
C#文件和流 本文主要是对C#中的流进行详细讲解,关于C#中的文件操作,考虑到后期.net core跨平台,相关操作可能会发生很大变化,所以此处不对文件系统(包括目录.文件)过多的讲解,只会描述出在.net framework下常用的类,具体用法请参见官方API文档. 管理文件系统 在Windows上,用于浏览文件系统和执行操作的相关类有: FileSystemInfo:这是表示任何文件系统对象的基类. FileInfo和File:这些类表示文件系统上的文件. DirectoryInfo和Dir…
C# 委托 委托是类型安全的类,它定义了返回类型和参数的类型,委托类可以包含一个或多个方法的引用.可以使用lambda表达式实现参数是委托类型的方法. 委托 当需要把一个方法作为参数传递给另一个方法时,就需要使用委托.委托是一种特殊类型的对象,其特殊之处在于,我们以前定义的所有对象都包含数据,而委托包含的只是一个或多个方法的地址. 声明委托类型 声明委托类型就是告诉编译器,这种类型的委托表示的是哪种类型的方法.语法如下: delegate void delegateTypeName[<T>](…
C#集合 有两种主要的集合类型:泛型集合和非泛型集合. 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合. 因此,泛型集合通常能提供更好的性能. 构造泛型集合时,它们接受类型形参:并在向该集合添加项或从该集合删除项时无需在Object类型间来回转换. 集合接口和类型 System.Array :用于数组,提供创建,操作,搜索和排序数组的方法,是所有数组的基类. System.Collections :是ArrayList.Queue.Hashtable等基类…
前言 在上一篇中简单介绍了Linq的入门级用法,这一篇尝试讲解一些更加深入的使用方法,与前一篇的结构不一样的地方是,这一篇我会先介绍Linq里的支持方法,然后以实际需求为引导,分别以方法链的形式和类SQL的形式写出来. 前置概念介绍 Predicate<T> 谓词.断言,等价于 Func<T,bool> 即返回bool的表达式 Expression<TDelegate> 表达式树,这个类很关键,但是在这里会细说,我们会讲它的一个特殊的泛型类型:Expression<…
C#任务和并行编程 我们在处理有些需要等待的操作时,例如,文件读取.数据库或网络访问等,这些都需要一定的时间,我们可以使用多线程,不需要让用户一直等待这些任务的完成,就可以同时执行其他的一些操作.即使是处理密集型的任务,线程也能起到帮助作用, 一个进程的多个线程可以同时运行在不同的CPU上,或多核CPU的不同内核上. 在.NET 4.0之后,提供了线程的一个抽象机制:任务.任务允许建立任务之间的关系(例如,一个任务完成之后可以继续下一个任务),也可以建立一个层级结构,其中包含多个任务. 可以是使…
C#任务同步 如果需要共享数据,就必须使用同步技术,确保一次只有一个线程访问和改变共享状态.如果不注意同步,就会出现争用条件和死锁. 不同步导致的线程问题 如果两个或多个线程访问相同的对象,并且对共享状态的访问没有同步,就会出现争用条件.为了解决这类问题,可以使用lock语句,对共享对象进行锁定,除了进行锁定之外,还可以将共享对象设置为线程安全的对象. 注意:只有引用类型才能使用lock进行锁定. 锁定并不是越多越好,过多的锁定会造成死锁,在死锁中,至少有两个线程被挂起,并等待对象解除锁定.由于…
C# 泛型(Generics) 泛型概述 泛型是C#编程语言的一部分,它与程序集中的IL(Intermediate Language,中间语言)代码紧密的集成.通过泛型,我们不必给不同的类型编写功能相同的许多方法和类,而是可以创建独立于被包含类型的一个类或方法. 例如,通过使用泛型类型参数 T,可以编写其他客户端代码能够使用的单个类,而不会产生运行时转换或装箱操作的成本或风险.使用泛型类型可以最大限度地重用代码.保护类型安全性以及提高性能. 泛型性能 泛型的一个主要优点是性能.值类型存储在栈上,…
俗话说的好,实践出真知,所以除了理论知识掌握扎实以外,更重要的是要多加操练,这样才能掌握核心科技. 今天我们就用刚学会的类来实践一下,目标便是完成上一篇中的剁手任务. 我们的商品类已经准备好了,代码重新罗列一次,这里增加了一个重载方法,关于重载这里不过多介绍,以后会专门文章介绍,这里把它当成一个普通方法就好了,主要用来比较两个商品是否相等,如果对代码不熟悉的话可以再返回去看一下上一篇文章. 这里顺便介绍一下Java注释的正确使用姿势.注释是插在源代码中间用于对代码进行说明的文字,不会被编译和执行…