连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 不只是检索数据. 它也是用于转换数据的强大工具. 通过使用 LINQ查询,可以使用源序列作为输入,并通过多种方式对其进行修改,以创建新的输出序列.通过排序和分组,你可以修改序列本身,而无需修改这些元素本身. 但也许 LINQ 查询最强大的功能是创建新类型. 这可以在 select 子句中完成. 例如,可以执行下列任务: 将多个输入序列合并为具有新类型的单个输出序列. 创建其元素由源序列中每个元素的一个或多个属性组成…
连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符 是组成 LINQ 模式的方法. 这些方法中的大多数都作用于序列:其中序列指其类型实现 IEnumerable<T> 接口或 IQueryable<T> 接口的对象. 标准查询运算符提供包括筛选.投影.聚合.排序等在内的查询功能. 共有两组 LINQ 标准查询运算符,一组作用于类型 IEnumerable<T> 的对象,另一组作用于类型 IQueryable<T> 的对象. 构成每个集合的方…
连载目录    [已更新最新开发文章,点击查看详细] 语言集成查询 (LINQ) 是一系列直接将查询功能集成到 C# 语言的技术统称. 数据查询历来都表示为简单的字符串,没有编译时类型检查或 IntelliSense 支持. 此外,需要针对每种类型的数据源了解不同的查询语言:SQL 数据库.XML 文档.各种 Web 服务等. 借助 LINQ,查询成为了最高级的语言构造,就像类.方法和事件一样. 可以使用语言关键字和熟悉的运算符针对强类型化对象集合编写查询. LINQ 系列技术提供了针对对象 (…
连载目录    [已更新最新开发文章,点击查看详细] 本篇介绍 LINQ 查询表达式和一些在查询中执行的典型操作. 获取数据源 在 LINQ 查询中,第一步是指定数据源. 和大多数编程语言相同,在使用 C# 时也必须先声明变量,然后才能使用它. 在 LINQ 查询中,先使用 from 子句引入数据源 (customers) 和范围变量 (cust) . // 从 IEnumerable<Customer> 中查询所有的客户信息 var queryAllCustomers = from cust…
连载目录    [已更新最新开发文章,点击查看详细] 介绍性的语言集成查询 (LINQ) 文档中的大多数查询是使用 LINQ 声明性查询语法编写的.但是在编译代码时,查询语法必须转换为针对 .NET 公共语言运行时 (CLR) 的方法调用. 这些方法调用会调用标准查询运算符(名称为 Where.Select.GroupBy.Join.Max 和 Average 等). 可以使用方法语法(而不查询语法)来直接调用它们. 查询语法和方法语法在语义上是相同的,但是许多人发现查询语法更简单且更易于阅读.…
连载目录    [已更新最新开发文章,点击查看详细] 查询 是一种从数据源检索数据的表达式. 查询通常用专门的查询语言来表示. 随着时间的推移,人们已经为各种数据源开发了不同的语言:例如,用于关系数据库的 SQL 和用于 XML 的 XQuery. 因此,开发人员对于他们必须支持的每种数据源或数据格式,都不得不学习一种新的查询语言. LINQ 通过提供一种跨各种数据源和数据格式使用数据的一致模型,简化了这一情况. 在 LINQ 查询中,始终会用到对象. 可以使用相同的基本编码模式来查询和转换 X…
连载目录    [已更新最新开发文章,点击查看详细] LINQ 查询基于 .NET Framework 版本 2.0 中引入的泛型类型. 无需深入了解泛型即可开始编写查询. 但是,可能需要了解 2 个基本概念: 创建泛型集合类(如 List<T>)的实例时,需将“T”替换为列表将包含的对象类型. 例如,字符串列表表示为 List<string>,Customer 对象列表表示为 List<Customer>.泛型列表属于强类型,与将其元素存储为 Object 的集合相比…
连载目录    [已更新最新开发文章,点击查看详细] 查询表达式 查询表达式使用类似于 SQL 或 XQuery 的声明性语法来查询 IEnumerable 集合. 在编译时,查询语法转换为对 LINQ 提供程序的标准查询运算符扩展方法实现的方法调用. 应用程序通过使用 using 指令指定适当的命名空间来控制范围内的标准查询运算符. 下面的查询表达式获取一个字符串数组,按字符串中的第一个字符对字符串进行分组,然后对各组进行排序. var query = from str in stringAr…
连载目录    [已更新最新开发文章,点击查看详细] 若要有效编写查询,应了解完整的查询操作中的变量类型是如何全部彼此关联的. 如果了解这些关系,就能够更容易地理解文档中的 LINQ 示例和代码示例. 另外,还能了解在使用 var 隐式对变量进行类型化时的后台操作. LINQ 查询操作在数据源.查询本身及查询执行中是强类型化的. 查询中变量的类型必须与数据源中元素的类型和 foreach 语句中迭代变量的类型兼容. 此强类型保证在编译时捕获类型错误,以便可以在用户遇到这些错误之前更正它们. 为了…
连载目录    [已更新最新开发文章,点击查看详细] 本篇主要介绍标准查询运算符的常用运算功能. 01 对数据排序 排序操作基于一个或多个属性对序列的元素进行排序. 第一个排序条件对元素执行主要排序. 通过指定第二个排序条件,您可以对每个主要排序组内的元素进行排序. 下图展示了对一系列字符执行按字母顺序排序操作的结果. 下节列出了对数据进行排序的标准查询运算符方法. 方法 方法名 说明 C# 查询表达式语法 详细信息 OrderBy 按升序对值排序. orderby Enumerable.Ord…
连载目录    [已更新最新开发文章,点击查看详细] 标准查询运算符方法的 LINQ to Objects 实现主要通过两种方法之一执行:立即执行和延迟执行.使用延迟执行的查询运算符可以进一步分为两种类别:流式处理和非流式处理. 如果你了解不同查询运算符的执行方式,则有助于理解从给定查询中获得的结果. 如果数据源是不断变化的,或者如果你要在另一个查询的基础上构建查询,这种帮助尤其明显. 本篇根据标准查询运算符的执行方式对其进行分类. 执行方式 即时 立即执行指的是在代码中声明查询的位置读取数据源…
连载目录    [已更新最新开发文章,点击查看详细] 某些使用更频繁的标准查询运算符具有专用的 C# 语言关键字语法,使用这些语法可以在查询表达式中调用这些运算符. 查询表达式是比基于方法的等效项更具可读性的另一种查询表示形式. 查询表达式子句在编译时被转换为对查询方法的调用. 查询表达式语法表 下表列出包含等效查询表达式子句的标准查询运算符. 方法 C# 查询表达式语法  Cast 使用显式类型化范围变量,例如:from int i in  numbers (有关详细信息,请参阅 from 子…
连载目录    [已更新最新开发文章,点击查看详细] 存在可与表达式树配合使用的 .NET Core framework 中的类的大型列表. 可以在 System.Linq.Expressions 查看完整列表. 让我们来了解一下 framework 类的设计方式,而不是逐一查看完整列表. 在语言设计中,表达式是可计算并返回值的代码主体. 表达式可能非常简单:常数表达式 1 返回常数值 1. 它们可能更复杂:表达式 (-B + Math.Sqrt(B*B - 4 * A * C)) / (2 *…
C#基础拾遗系列之二:使用ILSpy探索C#7.0新增功能点   第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 类与接口 属性.方法.事件 (2)类型安全:C#还允许通过dynamic关键字动态指定类型. 但是,C#仍然是一个主要的静态类型语言.之所以是一种强类型的语言,是因为它的类型规则是非常严格的,例如,不能够使用一个float类型的参数去…
连载目录    [已更新最新开发文章,点击查看详细] 在 C# 中,协变和逆变能够实现数组类型.委托类型和泛型类型参数的隐式引用转换. 协变保留分配兼容性,逆变则与之相反. 以下代码演示分配兼容性.协变和逆变之间的差异. // 分配兼容性. string str = "test"; // 将派生类型更高的对象分配给派生类型更低的对象 object obj = str; IEnumerable<string> strings = new List<string>(…
第一部分: C#是一种通用的,类型安全的,面向对象的编程语言.有如下特点: (1)面向对象:c# 是面向对象的范例的一个丰富实现, 它包括封装.继承和多态性.C#面向对象的行为包括: 统一的类型系统 类与接口 属性.方法.事件 (2)类型安全:C#还允许通过dynamic关键字动态指定类型. 但是,C#仍然是一个主要的静态类型语言.之所以是一种强类型的语言,是因为它的类型规则是非常严格的,例如,不能够使用一个float类型的参数去调用一个解释int 类型的函数,除非显式的把float转换为int…
原文地址:  https://www.cnblogs.com/runningsmallguo/p/8972678.html 第二部分:C#7.0新增的功能 (1)数字字面量的提升: C#7中的数字文字可以包含下划线以提高可读性,这些被称为数字分隔符,并被编译器忽略. 代码如下: 运行结果: 注意:二进制文字可以用0b前缀指定. 所以见到这种写法你不要惊讶,只是为了提高可读性. (2)Out variables and discards(接收out变量和丢弃out变量) 代码: 以前我们的写法:…
连载目录    [已更新最新开发文章,点击查看详细] 从 Visual C# 3.0 开始,在方法范围内声明的变量可以具有隐式“类型”var. 隐式类型本地变量为强类型,就像用户已经自行声明该类型,但编译器决定类型一样. i 的以下两个声明在功能上是等效的: ; // 隐式类型 ; // 显式类型 下面的示例演示两个查询表达式. 在第一个表达式中,var 的使用是允许的,但不是必需的,因为查询结果的类型可以明确表述为 IEnumerable<string>. 不过,在第二个表达式中,var 允…
连载目录    [已更新最新开发文章,点击查看详细] 分部类型 拆分一个类.一个结构.一个接口或一个方法的定义到两个或更多的文件中, 每个源文件包含类型或方法定义的一部分,编译应用程序时将把所有部分组合起来.   分部类 在以下几种情况下需要拆分类定义: 处理大型项目时,使一个类分布于多个独立文件中可以让多位程序员同时对该类进行处理. 当使用自动生成的源文件时,你可以添加代码而不需要重新创建源文件. Visual Studio 在创建Windows 窗体.Web 服务包装器代码等时会使用这种方法…
前言 在<C# 8.0 中使用 Index 和 Range>这篇中有人提出^0是什么意思?处于好奇就去试了,结果抛出异常.查看官方文档说^0索引与 sequence[sequence.Length] 相同,表达式 sequence[^0] 不会引发异常,就像 sequence[sequence.Length] 一样.但是在实际使用[^0]的时候抛出IndexOutOfRangeException的异常,很疑惑究竟是什么原因? 先说一下 C# 8.0 新增的两个新类型和两个新运算符,允许构造Sy…
连载目录    [已更新最新开发文章,点击查看详细] 查询是什么及其作用是什么 查询是一组指令,描述要从给定数据源(或源)检索的数据以及返回的数据应具有的形状和组织. 查询与它生成的结果不同. 通常情况下,源数据按逻辑方式组织为相同类型的元素的序列. 例如,SQL 数据库表包含行的序列. 在 XML 文件中,存在 XML 元素的“序列”(尽管这些元素在树结构按层次结构进行组织). 内存中集合包含对象的序列. 从应用程序的角度来看,原始源数据的特定类型和结构并不重要. 应用程序始终将源数据视为 I…
Android 7.0 Nougat 为用户和开发者引入多种新功能.本文重点介绍面向开发者的新功能. 请务必查阅 Android 7.0 行为变更以了解平台变更可能影响您的应用的领域. 要详细了解 Android 7.0 的消费者功能,请访问 www.android.com. 多窗口支持 在 Android 7.0 中,我们为该平台引入了一个新的而且非常需要的多任务处理功能 — 多窗口支持. 现在,用户可以一次在屏幕上打开两个应用. 在运行 Android 7.0 的手机和平板电脑上,用户可以并…
连载目录    [已更新最新开发文章,点击查看详细] C# 6.0 版本包含许多可提高开发人员工作效率的功能. 这些功能的总体效果是让你编写的代码更简洁.更具可读性. 该语法不像许多常见做法那样繁琐. 可以更轻松地看出设计意图. 好好了解这些功能可以帮助你提高生产力,编写更具可读性的代码. 你可以更专注于功能,而不是语言的构造. 本文的其余部分是对每个功能的概述,并提供用于探索每个功能的链接. 还可以在教程部分的 C# 6 交互式探索中探索这些功能. 01 只读自动属性 只读自动属性提供了更简洁…
连载目录    [已更新最新开发文章,点击查看详细] C#8.0提供了许多增强功能 01 Readonly 成员 可将 readonly 修饰符应用于结构的任何成员. 它指示该成员不会修改状态. 这比将 readonly 修饰符应用于 struct 声明更精细. 请考虑以下可变结构: public struct Point { public double X { get; set; } public double Y { get; set; } public double Distance =>…
连载目录    [已更新最新开发文章,点击查看详细] C# 7.0 向 C# 语言添加了许多新功能 01 out 变量 支持 out 参数的现有语法已在此版本中得到改进. 现在可以在方法调用的参数列表中声明 out 变量,而不是编写单独的声明语句: if (int.TryParse(input, out int result)) Console.WriteLine(result); else Console.WriteLine("Could not parse input"); 为清晰…
连载目录    [已更新最新开发文章,点击查看详细] 匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型. 类型名由编译器生成,并且不能在源代码级使用. 每个属性的类型由编译器推断. 可通过使用 new 运算符和对象初始值创建匿名类型. 有关对象初始值设定项的详细信息,请参阅对象和集合初始值设定项. 以下示例显示了用两个名为 Amount 和 Message 的属性进行初始化的匿名类型. , Message = "Hello" }; // 将…
连载目录    [已更新最新开发文章,点击查看详细] 扩展方法使你能够向现有类型“添加”方法,而无需创建新的派生类型.重新编译或以其他方式修改原始类型. 扩展方法是一种特殊的静态方法,但可以像扩展类型上的实例方法一样进行调用. 对于用 C#.F# 和 Visual Basic 编写的客户端代码,调用扩展方法与调用在类型中实际定义的方法没有明显区别. 实现和调用自定义扩展方法 介绍如何为任意 .NET 类型实现自定义扩展方法. 客户端代码可以通过以下方法使用扩展方法,添加包含这些扩展方法的 DLL…
连载目录    [已更新最新开发文章,点击查看详细] 表达式树中的每个节点将是派生自 Expression 的类的对象. 该设计使得访问表达式树中的所有节点成为相对直接的递归操作. 常规策略是从根节点开始并确定它是哪种节点. 如果节点类型具有子级,则以递归方式访问该子级. 在每个子节点中,重复在根节点处使用的步骤:确定类型,且如果该类型具有子级,则访问每个子级. 检查不具有子级的表达式 让我们首先访问一个非常简单的表达式树中的每个节点. 下面是创建常数表达式然后检查其属性的代码: , typeo…
Xcode是用于为Apple TV,Apple Watch,iPad,iPhone和Mac创建应用程序的完整开发人员工具集.Xcode开发环境采用tvOS SDK,watchOS SDK,iOS SDK和macOS SDK的形式捆绑Instruments分析工具,Simulator和OS框架. Xcode 9的亮点 Xcode 9包括整体质量改进以及广泛的新功能. 全新编辑.快速,基于结构的编辑器,可让您智能地突出显示和浏览代码.包括伟大的Markdown支持. 重构.重构内置于编辑体验之中,并…
C# 6.0 版本包含许多可提高开发人员工作效率的功能. 此版本中的功能包括: 只读自动属性: 可以创建只能在构造函数中设置的只读自动属性. 自动属性初始值设定项: 可以编写初始化表达式来设置自动属性的初始值. Expression-bodied 函数成员: 可以使用 lambda 表达式创建单行方法. using static: 可以将单个类的所有方法导入当前命名空间. Null - 条件运算符: 可以简洁.安全地访问对象的成员,同时仍能使用 null 条件运算符检查 null. 字符串内插:…