转自:https://blog.csdn.net/qq_21419015/article/details/80495322

IEnumerable 和IEnumerable<T> 接口在 .NET 中是非常重要的接口,它允许开发人员定义foreach语句功能的实现并支持非泛型方法的简单的迭代,IEnumerable和IEnumerable<T>接口是 .NET Framework 中最基本的集合访问器。它定义了一组扩展方法,用来对数据集合中的元素进行遍历、过滤、排序、搜索等操作。

IEnumerable接口是非常的简单,只包含一个抽象的方法Get IEnumerator(T),它返回一个可用于循环访问集合的IEnumerator对象。

IEnumerable、IEnumerator、ICollection、IList、List
IEnumerator:提供在普通集合中遍历的接口,有Current,MoveNext(),Reset(),其中Current返回的是object类型。
IEnumerable: 暴露一个IEnumerator,支持在普通集合中的遍历。
IEnumerator<T>:继承自IEnumerator,有Current属性,返回的是T类型。

IEnumerable<T>:继承自IEnumerable,暴露一个IEnumerator<T>,支持在泛型集合中遍历。

扩展方法如下表所示:

名称 说明
Aggregate

已重载。 对一个序列应用累加器函数。(由 Enumerable 定义。)

Aggregate

已重载。 对一个序列应用累加器函数。 将指定的种子值用作累加器初始值。(由 Enumerable 定义。)

Aggregate

已重载。 对一个序列应用累加器函数。 将指定的种子值用作累加器的初始值,并使用指定的函数选择结果值。(由 Enumerable 定义。)

All

确定是否对序列中的所有元素都满足条件。(由 Enumerable 定义。)

Ancestors

已重载。 返回包含与源集合中的每个节点的上级元素的集合。(由 Extensions 定义。)

Ancestors

已重载。 返回经过筛选的元素集合,其中包含对源集合中的每个节点的上级。 仅具有匹配的元素 XName 包括在集合中。(由 Extensions 定义。)

Any

已重载。 确定序列是否包含任何元素。(由 Enumerable 定义。)

Any

已重载。 确定是否序列中的任何元素都满足条件。(由 Enumerable 定义。)

AsEnumerable

返回输入类型化为 IEnumerable。(由 Enumerable 定义。)

AsParallel

已重载。 启用查询的并行化。(由 ParallelEnumerable 定义。)

AsQueryable

已重载。 将转换泛型 IEnumerable 于泛型 IQueryable。(由 Queryable 定义。)

Average

已重载。 计算序列的平均值 Decimal 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 计算序列的平均值 Double 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 计算序列的平均值 Int32 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 计算序列的平均值 Int64 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 可以为 null 的序列的平均值,计算 Decimal 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 可以为 null 的序列的平均值,计算 Double 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 可以为 null 的序列的平均值,计算 Int32 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 可以为 null 的序列的平均值,计算 Int64 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 可以为 null 的序列的平均值,计算 Single 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Average

已重载。 计算序列的平均值 Single 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Cast

将强制转换的元素 IEnumerable 为指定的类型。(由 Enumerable 定义。)

Concat

连接两个序列。(由 Enumerable 定义。)

Contains

已重载。 确定序列是否包含指定的元素使用的默认相等比较器。(由 Enumerable 定义。)

Contains

已重载。 确定序列是否使用指定的包含指定的元素 IEqualityComparer。(由 Enumerable 定义。)

CopyToDataTable

已重载。 返回 DataTable ,其中包含的副本 DataRow 对象,给定输入 IEnumerable 对象其中泛型参数 T 是 DataRow。(由 DataTableExtensions 定义。)

CopyToDataTable

已重载。 副本 DataRow 对象传递给指定 DataTable, ,给定输入 IEnumerable 对象其中泛型参数 T 是 DataRow。(由 DataTableExtensions 定义。)

CopyToDataTable

已重载。 副本 DataRow 对象传递给指定 DataTable, ,给定输入 IEnumerable 对象其中泛型参数 T 是 DataRow。(由 DataTableExtensions 定义。)

Count

已重载。 返回序列中的元素数。(由 Enumerable 定义。)

Count

已重载。 返回一个数字来表示多少个元素指定序列中的满足条件。(由 Enumerable 定义。)

DefaultIfEmpty

已重载。 返回单一实例集合中指定的序列或类型参数的默认值的元素,如果序列为空。(由 Enumerable 定义。)

DefaultIfEmpty

已重载。 返回单一实例集合中指定的序列或指定的值的元素,如果序列为空。(由 Enumerable 定义。)

DescendantNodes

返回源集合中的每个文档和元素的子代节点的集合。(由 Extensions 定义。)

Descendants

已重载。 返回元素的集合,其中包含每个元素和文档与源集合中的子代元素。(由 Extensions 定义。)

Descendants

已重载。 返回经过筛选的元素集合,其中包含每个元素和文档与源集合中的子代元素。 仅具有匹配的元素 XName 包括在集合中。(由 Extensions 定义。)

Distinct

已重载。 通过使用的默认相等比较器对值进行比较从序列返回非重复元素。(由 Enumerable 定义。)

Distinct

已重载。 返回序列中通过使用指定的非重复元素 IEqualityComparer 对值进行比较。(由 Enumerable 定义。)

ElementAt

返回序列中的指定索引处的元素。(由 Enumerable 定义。)

ElementAtOrDefault

返回序列中指定索引处的元素;如果索引超出范围,则返回默认值。(由 Enumerable 定义。)

Elements

已重载。 返回源集合中的每个元素和文档的元素的子集合。(由 Extensions 定义。)

Elements

已重载。 源集合中返回经过筛选的子集合元素的每个元素和文档。 仅具有匹配的元素 XName 包括在集合中。(由 Extensions 定义。)

Except

已重载。 通过使用默认的相等比较器对值进行比较,生成两个序列的差集。(由 Enumerable 定义。)

Except

已重载。 使用指定的生成两个序列的差集 IEqualityComparer 对值进行比较。(由 Enumerable 定义。)

First

已重载。 返回一个序列的第一个元素。(由 Enumerable 定义。)

First

已重载。 返回序列中满足指定条件的第一个元素。(由 Enumerable 定义。)

FirstOrDefault

已重载。 返回序列中的第一个元素;如果序列中不包含任何元素,则返回默认值。(由 Enumerable 定义。)

FirstOrDefault

已重载。 返回序列中满足条件的第一个元素;如果未找到这样的元素,则返回默认值。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数对序列的元素进行分组。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数并将进行比较的键使用指定的比较器对序列的元素进行分组。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数和项目的元素的每个组通过使用指定的函数对序列的元素进行分组。(由 Enumerable 定义。)

GroupBy

已重载。 根据键选择器函数对序列的元素进行分组。 通过使用比较器对键进行比较,并且通过使用指定的函数对每个组的元素进行投影。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。(由 Enumerable定义。)

GroupBy

已重载。 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的比较器对键进行比较。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的函数对每个组的元素进行投影。(由 Enumerable 定义。)

GroupBy

已重载。 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值。 通过使用指定的比较器对键值进行比较,并且通过使用指定的函数对每个组的元素进行投影。(由 Enumerable 定义。)

GroupJoin

已重载。 基于键相等对两个序列的元素进行关联,并对结果进行分组。 使用默认的相等比较器对键进行比较。(由 Enumerable 定义。)

GroupJoin

已重载。 基于键相等对两个序列的元素进行关联,并对结果进行分组。 指定 IEqualityComparer 用来对键进行比较。(由 Enumerable 定义。)

InDocumentOrder

返回包含按文档顺序排序的源集合中的所有节点的节点集合。(由 Extensions 定义。)

Intersect

已重载。 通过使用的默认相等比较器对值进行比较,生成两个序列的交集。(由 Enumerable 定义。)

Intersect

已重载。 使用指定的生成两个序列的交集IEqualityComparer值进行比较。(由 Enumerable 定义。)

Join

已重载。 基于匹配键对两个序列的元素关联。 使用默认的相等比较器对键进行比较。(由 Enumerable 定义。)

Join

已重载。 基于匹配键对两个序列的元素关联。 指定 IEqualityComparer 用来对键进行比较。(由 Enumerable 定义。)

Last

已重载。 返回一个序列的最后一个元素。(由 Enumerable 定义。)

Last

已重载。 返回序列中满足指定条件的最后一个元素。(由 Enumerable 定义。)

LastOrDefault

已重载。 返回序列中的最后一个元素;如果序列中不包含任何元素,则返回默认值。(由 Enumerable 定义。)

LastOrDefault

已重载。 返回序列中满足条件的最后一个元素;如果未找到这样的元素,则返回默认值。(由 Enumerable 定义。)

LongCount

已重载。 返回Int64表示序列中的元素总数。(由 Enumerable 定义。)

LongCount

已重载。 返回 Int64 表示序列中的多少个元素满足条件。(由 Enumerable 定义。)

Max

已重载。 泛型序列中返回的最大值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大 Decimal 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大 Double 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大 Int32 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大 Int64 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大可以为 null Decimal 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大可以为 null Double 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大可以为 null Int32 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大可以为 null Int64 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大可以为 null Single 值。(由 Enumerable 定义。)

Max

已重载。 调用转换函数对序列的每个元素并返回最大 Single 值。(由 Enumerable 定义。)

Max

已重载。 调用泛型序列的每个元素的转换函数并返回最大结果值。(由 Enumerable 定义。)

Min

已重载。 泛型序列中返回的最小值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回所需的最低 Decimal 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回所需的最低 Double 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回所需的最低 Int32 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回所需的最低 Int64 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回最小值可以为 null Decimal 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回最小值可以为 null Double 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回最小值可以为 null Int32 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回最小值可以为 null Int64 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回最小值可以为 null Single 值。(由 Enumerable 定义。)

Min

已重载。 调用转换函数对序列的每个元素,并返回所需的最低 Single 值。(由 Enumerable 定义。)

Min

已重载。 调用泛型序列的每个元素的转换函数,并返回最小的结果值。(由 Enumerable 定义。)

Nodes

返回源集合中的每个文档和元素节点的子集合。(由 Extensions 定义。)

OfType

筛选的元素 IEnumerable 根据指定的类型。(由 Enumerable 定义。)

OrderBy

已重载。 按根据某个键按升序对序列的元素进行排序。(由 Enumerable 定义。)

OrderBy

已重载。 按使用指定的比较器按升序对序列的元素进行排序。(由 Enumerable 定义。)

OrderByDescending

已重载。 按根据某个键按降序对序列的元素进行排序。(由 Enumerable 定义。)

OrderByDescending

已重载。 使用指定的比较器按降序对序列的元素排序。(由 Enumerable 定义。)

Remove

已重载。 从其父节点与源集合中删除每个节点。(由 Extensions 定义。)

Reverse

反转序列中元素的顺序。(由 Enumerable 定义。)

Select

已重载。 将序列中的每个元素投影到新表单。(由 Enumerable 定义。)

Select

已重载。 通过合并元素的索引投影到一个新窗体的序列的每个元素。(由 Enumerable 定义。)

SelectMany

已重载。 一个序列的每个元素投影 IEnumerable 并将合并为一个序列将结果序列。(由 Enumerable 定义。)

SelectMany

已重载。 一个序列的每个元素投影 IEnumerable, ,并将合并为一个序列将结果序列。 每个源元素的索引用于该元素的投影表。(由 Enumerable 定义。)

SelectMany

已重载。 一个序列的每个元素投影 IEnumerable, 将平展为一个序列,将结果序列,其中调用结果选择器函数对每个元素。(由 Enumerable 定义。)

SelectMany

已重载。 一个序列的每个元素投影 IEnumerable, 将平展为一个序列,将结果序列,其中调用结果选择器函数对每个元素。 每个源元素的索引用于该元素的中间投影表。(由 Enumerable 定义。)

SequenceEqual

已重载。 确定两个序列是否相等的元素进行比较通过使用相应类型的默认相等比较器。(由 Enumerable 定义。)

SequenceEqual

已重载。 确定两个序列是否通过使用指定的比较它们的元素相等 IEqualityComparer。(由 Enumerable 定义。)

Single

已重载。 返回序列的唯一元素;如果该序列并非恰好包含一个元素,则会引发异常。(由 Enumerable 定义。)

Single

已重载。 返回序列中满足指定条件的唯一元素;如果有多个这样的元素存在,则会引发异常。(由 Enumerable 定义。)

SingleOrDefault

已重载。 返回一个序列,或默认值的唯一元素,如果序列为空,则为如果序列中存在多个元素,则此方法将引发异常。(由 Enumerable 定义。)

SingleOrDefault

已重载。 返回序列中满足指定条件的唯一元素;如果这类元素不存在,则返回默认值;如果有多个元素满足该条件,此方法将引发异常。(由 Enumerable 定义。)

Skip

跳过指定的数量的序列中的元素,然后返回剩余元素。(由 Enumerable 定义。)

SkipWhile

已重载。 只要指定的条件为 true,然后返回剩余元素,跳过序列中的元素。(由 Enumerable 定义。)

SkipWhile

已重载。 只要指定的条件为 true,然后返回剩余元素,跳过序列中的元素。 将在谓词函数的逻辑中使用元素的索引。(由 Enumerable 定义。)

Sum

已重载。 计算的序列的和 Decimal 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算的序列的和 Double 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算的序列的和 Int32 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算的序列的和 Int64 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算可以为 null 的序列的和 Decimal 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算可以为 null 的序列的和 Double 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算可以为 null 的序列的和 Int32 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算可以为 null 的序列的和 Int64 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算可以为 null 的序列的和 Single 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Sum

已重载。 计算的序列的和 Single 通过调用对输入序列中的每个元素的转换函数获得的值。(由 Enumerable 定义。)

Take

从序列的开头返回指定的数量的连续元素。(由 Enumerable 定义。)

TakeWhile

已重载。 返回序列中的元素,只要指定的条件为真。(由 Enumerable 定义。)

TakeWhile

已重载。 返回序列中的元素,只要指定的条件为真。 将在谓词函数的逻辑中使用元素的索引。(由 Enumerable 定义。)

ToArray

创建一个数组,从 IEnumerable。(由 Enumerable 定义。)

ToDictionary

已重载。 创建 Dictionary 从 IEnumerable 根据指定的键选择器函数。(由 Enumerable 定义。)

ToDictionary

已重载。 创建 Dictionary 从 IEnumerable 根据指定的键选择器函数和键比较器。(由 Enumerable 定义。)

ToDictionary

已重载。 创建 Dictionary 从 IEnumerable 根据指定的键选择器和元素选择器函数。(由 Enumerable 定义。)

ToDictionary

已重载。 创建 Dictionary 从 IEnumerable 根据指定的键选择器函数、 比较器和元素选择器函数。(由 Enumerable 定义。)

ToList

创建 List 从 IEnumerable。(由 Enumerable 定义。)

ToLookup

已重载。 创建 Lookup 从 IEnumerable 根据指定的键选择器函数。(由 Enumerable 定义。)

ToLookup

已重载。 创建 Lookup 从 IEnumerable 根据指定的键选择器函数和键比较器。(由 Enumerable 定义。)

ToLookup

已重载。 创建 Lookup 从 IEnumerable 根据指定的键选择器和元素选择器函数。(由 Enumerable 定义。)

ToLookup

已重载。 创建 Lookup 从 IEnumerable 根据指定的键选择器函数、 比较和元素选择器函数。(由 Enumerable 定义。)

Union

已重载。 通过使用默认的相等比较器生成的两个序列的并集。(由 Enumerable 定义。)

Union

已重载。 使用指定的生成两个序列的并集 IEqualityComparer。(由 Enumerable 定义。)

Where

已重载。 基于谓词筛选值序列。(由 Enumerable 定义。)

Where

已重载。 基于谓词筛选值序列。 将在谓词函数的逻辑中使用每个元素的索引。(由 Enumerable 定义。)

Zip

适用于两个序列,生成的结果序列的相应元素指定的函数。(由 Enumerable 定义。)

下面列举几个扩展方法实现的示例:(VS 2014 环境)

示例1:

Sum扩展方法:

新建如下几个类:

book.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IEnumerableSum
{
/// <summary>
/// 数据模型
/// </summary>
public class Book
{
public string Name { get; set; }
public decimal Price { get; set; }
}
}

Shopping.cs 如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IEnumerableSum
{
/// <summary>
/// 表示 Book 对象集合
/// </summary>
public class Shopping
{
private ValueCalculator vc; public Shopping(ValueCalculator vcParam)
{
vc = vcParam;
}
public IEnumerable<Book> Books { get; set; } public decimal CalculateBookTotal()
{
return vc.ValueBooks(Books);
}
}
}

ValueCalculator.cs 如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IEnumerableSum
{
public class ValueCalculator
{
/// <summary>
/// 定义了一个单一的方法ValueBooks,使用了IEnumerable的Sum方法将传递给该方法的可枚举对象中每一个 Book 对象的Price 属性值在一起
/// </summary>
/// <param name="books">该方法的可枚举对象</param>
/// <returns></returns>
public decimal ValueBooks(IEnumerable<Book> books)
{
return books.Sum(b => b.Price);
}
}
}

PS: 如果不理解 books.Sum(b => b.Price) ,可以查看 C# lambda 表达式。也可以擦汗查看本人MVC中的 lambda 案例,参阅

ASP.NET + MVC5 入门完整教程四---MVC 中使用扩展方法

Program.cs 如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace IEnumerableSum
{
class Program
{
static void Main(string[] args)
{ decimal totalPrice;
Book[] books =
{
new Book { Name = "Coho Vineyard", Price = 25.2M },
new Book { Name = "Lucerne Publishing", Price = 18.7M },
new Book { Name = "Wingtip Toys", Price = 6.0M },
new Book { Name = "Adventure Works", Price = 33.8M }
}; ValueCalculator vc = new ValueCalculator();
Shopping sp = new Shopping(vc) { Books = books };
totalPrice = sp.CalculateBookTotal();
Console.WriteLine("The total weight of the packages is: {0}", totalPrice);
Console.ReadKey(); } public decimal ValueBooks(IEnumerable<Book> books)
{
return books.Sum(b => b.Price);
}
}
}

运行结果如下图所示:

其他扩展方法具体实现可参见官方示例点击打开链接

IEnumerable 与 IEnumerable<T>的更多相关文章

  1. IEnumerable和IEnumerable<T>接口

    IEnumerable和IEnumerable<T>接口 IEnumerable和IEnumerable<T>接口在.NET中是非常重要的接口,它允许开发人员定义foreach ...

  2. 19.C#逐一介绍IEnumerable和IEnumerable<T>中的扩展方法(10.3-10.5)

    今天没有太多的言语,只有代码,扩展方法多得太多,不能一一列完,书中一些,看多了也就会使用了. //Enumerable.Range 返回起始到结束范围,是一个Enumrable<int>类 ...

  3. 先说IEnumerable,我们每天用的foreach你真的懂它吗?

    我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

  4. 为IEnumerable<T>添加RemoveAll<IEnumerable<T>>扩展方法--高性能篇

    最近写代码,遇到一个问题,微软基于List<T>自带的方法是public bool Remove(T item);,可是有时候我们可能会用到诸如RemoveAll<IEnumerab ...

  5. .NET面试题系列[9] - IEnumerable

    .NET面试题系列目录 什么是IEnumerable? IEnumerable及IEnumerable的泛型版本IEnumerable<T>是一个接口,它只含有一个方法GetEnumera ...

  6. 细说 C# 中的 IEnumerable和IEnumerator接口

    我们先思考几个问题: 为什么在foreach中不能修改item的值? 要实现foreach需要满足什么条件? 为什么Linq to Object中要返回IEnumerable? 接下来,先开始我们的正 ...

  7. 从yield关键字看IEnumerable和Collection的区别

    C#的yield关键字由来以久,如果我没有记错的话,应该是在C# 2.0中被引入的.相信大家此关键字的用法已经了然于胸,很多人也了解yield背后的“延迟赋值”机制.但是即使你知道这个机制,你也很容易 ...

  8. IEnumerable和IQueryable和Linq的查询

    IEnumerable和IEnumerable 1.IEnumerable查询必须在本地执行.并且执行查询前我们必须把所有的数据加载到本地.而且更多的时候.加载的数据有大量的数据是我们不需要的无效数据 ...

  9. foreach为什么要实现IEnumerable接口而不是直接用IEnumerator接口

    在.Net中,要想被foreach遍历,那么目标对象要实现IEnumerable或IEnumerable<T>接口,这个接口有一个方法,GetEnumerator(),返回一个IEnume ...

随机推荐

  1. Codeforces 280D k-Maximum Subsequence Sum [模拟费用流,线段树]

    洛谷 Codeforces bzoj1,bzoj2 这可真是一道n倍经验题呢-- 思路 我首先想到了DP,然后矩阵,然后线段树,然后T飞-- 搜了题解之后发现是模拟费用流. 直接维护选k个子段时的最优 ...

  2. spring jdbctemplate调用存储过程,返回list对象

    注:本文来源于<  spring jdbctemplate调用存储过程,返回list对象 > spring jdbctemplate调用存储过程,返回list对象 方法: /** * 调用 ...

  3. Confluence 6 新安装配置数据库字符集编码

    Confluence 和你的数据库必须配置使用相同的字符集. Confluence 使用 UTF-8 字符集编码,所以你的数据库也必须配置为使用 UTF-8 (或者与 UTF-8 相同的编码,例如在 ...

  4. mysql视图的作用

    测试表:user有id,name,age,sex字段 测试表:goods有id,name,price字段 测试表:ug有id,userid,goodsid字段 视图的作用实在是太强大了,以下是我体验过 ...

  5. NIO(五)

    分散读取,聚集写入 package com.cppdy.nio; import java.io.RandomAccessFile; import java.nio.ByteBuffer; import ...

  6. centos忘记密码

    1.启动时按上下箭头,然后按e进入进入编辑模式 2.上下箭头切换在选择 linux ...这行在末尾输入 LANG=en_US.UTF-8 init=/bin/sh 然后按 ctrl+x 进行引导 3 ...

  7. poj3162 树形dp|树的直径 + 双单调队列|线段树,好题啊

    题解链接:https://blog.csdn.net/shiqi_614/article/details/8105149 用树形dp是超时的,, /* 先求出每个点可以跑的最长距离dp[i][0|1] ...

  8. 什么是 TCP 拆、粘包?如何解决(Netty)

    前言 记得前段时间我们生产上的一个网关出现了故障. 这个网关逻辑非常简单,就是接收客户端的请求然后解析报文最后发送短信. 但这个请求并不是常见的 HTTP ,而是利用 Netty 自定义的协议. 有个 ...

  9. JMeter 如何把上一个请求的结果作为下一个请求的参数 —— 使用正则提取器

    有这样一个压力测试环境,有一个上传页面,上传成功之后服务器会返回一些上传信息(比如文件的 id 或者保存路径之类的信息),然后压力机会继续下一个请求,比如调整 id 为 xx 的文件的一些信息等等.问 ...

  10. C++ Primer 笔记——命名空间

    1.我们既可以用 using 声明整个空间,也可以声明部分名字. using namespace std; using std::cout; 2.头文件不应包含 using 声明,因为头文件会拷贝到所 ...