转自: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. python----动态规划

    不能放弃治疗,每天都要进步!! 什么时候使用动态规划呢? 1. 求一个问题的最优解 2. 大问题可以分解为子问题,子问题还有重叠的更小的子问题 3. 整体问题最优解取决于子问题的最优解(状态转移方程) ...

  2. Java、Apache Tomcat下载与安装及环境变量配置

    1.Java JDK 与 Apache Tomcat 下载 JDK 下载 Apache Tomcat 下载 2.安装与环境变量配置 关于 JDK 的安装挺简单的,网上教程也挺多,Tomcat 下载免安 ...

  3. oracle 根据一个时间段获取这个时间段内所有月份、天数、日期

    注:本文来源于< oracle 根据一个时间段获取这个时间段内所有月份.天数.日期 > 获取月份列表: SELECT TO_CHAR(ADD_MONTHS(TO_DATE('2014-10 ...

  4. 《深入理解Oracle 12c数据库管理(第二版)》PDF

    一:下载获取位置: 二:本书图样: 三:本书目录: 图书目录: 第1章 安装Oracle 1.1 了解OFA 1.1.1 Oracle清单目录 1.1.2 Oracle基础目录 1.1.3 Oracl ...

  5. NIO(二)

    Mark和reset的使用 package com.cppdy.nio; import java.nio.ByteBuffer; //Mark和reset的使用 public class NIOBuf ...

  6. 1706: 神奇的编码(zzuli)

    题目描述 假如没有阿拉伯数字,我们要怎么表示数字呢 小明想了一个方法如下: 1 -> A 2 -> B 3 -> C .... 25 -> Y 26 -> Z 27 -& ...

  7. 【linux】ftp使用端口转发问题

    相关资料: 1.[ssh]端口转发 2.[ftp]主动模式和被动模式 先说结论:用端口转发无法解决ftp客户端与服务器的连接问题,原因是ftp的data端口不固定,不能把所有>1024的端口都做 ...

  8. cf里的一些简单组合数题

    cf711D 成环的和不成环的要单独计算,环用双联通做的QAQ /* 所有情况-成环的情况 */ #include<bits/stdc++.h> using namespace std; ...

  9. cf949C 建模,SCC缩点

    /* 给定n个数据中心,m份资料,每份资料在其中的两个中心备份,一天可供下载的时间是h小时 中心i在第hi小时需要维护,无法下载 现在要将一些中心的维护时间往后推1小时,使得任意时刻每份资料都可以被下 ...

  10. JS脚本计算从某日凌晨开始,经过了多长时间

    var a = new Date();//获取现在的时间 var d = Date.parse("Mar 25, 2019");//设定网站建立的时间 var t = a.getT ...