LINQ 生成运算符 Empty, Range, Repeat

LINQ包括生成运算符DefaultIfEmpty,Empty,Range&Repeat。Empty,Range和Repeat方法不是IEnumerable或IQueryable的扩展方法,而只是在静态类Enumerable中定义的静态方法。  

方法描述
Empty返回一个空集合
Range从第一个元素开始,使用指定数量的具有顺序值的元素生成IEnumerable <T>类型的集合。
Repeat生成具有指定元素数的IEnumerable <T>类型的集合,并且每个元素包含相同的指定值。

Empty

Empty()与其他LINQ方法一样,该方法不是IEnumerable或IQueryable的扩展方法。它是Enumerable静态类中包含的静态方法。因此,您可以像其他静态方法(如Enumerable.Empty <TResult>())一样调用它。Empty()方法返回指定类型的空集合,如下所示。

var emptyCollection1 = Enumerable.Empty<string>();
var emptyCollection2 = Enumerable.Empty<Student>();

Console.WriteLine("Count: {0} ", emptyCollection1.Count());
Console.WriteLine("Type: {0} ", emptyCollection1.GetType().Name );

Console.WriteLine("Count: {0} ",emptyCollection2.Count());
Console.WriteLine("Type: {0} ", emptyCollection2.GetType().Name );
输出:
Type: String[]
Count: 0
Type: Student[]
Count: 0

Range

Range()方法返回IEnumerable <T>类型的集合,该集合具有指定数量的元素和从第一个元素开始的顺序值。

var intCollection = Enumerable.Range(10, 10);
Console.WriteLine("总计数: {0} ", intCollection.Count());

for(int i = 0; i < intCollection.Count(); i++)
    Console.WriteLine("值,索引位置为 {0} : {1}", i, intCollection.ElementAt(i));
输出:

总计数: 10
值,索引位置为 0 : 10
值,索引位置为 1 : 11
值,索引位置为 2 : 12
值,索引位置为 3 : 13
值,索引位置为 4 : 14
值,索引位置为 5 : 15
值,索引位置为 6 : 16
值,索引位置为 7 : 17
值,索引位置为 8 : 18
值,索引位置为 9 : 19

在上面的示例中,Enumerable.Range(10, 10)创建了具有10个整数元素的集合,其顺序值从10开始。第一个参数指定元素的起始值,第二个参数指定要创建的元素数。

Repeat

Repeat()方法使用指定数量的元素生成IEnumerable <T>类型的集合,每个元素包含相同的指定值。

var intCollection = Enumerable.Repeat<int>(10, 10);
Console.WriteLine("总数: {0} ", intCollection.Count());

for(int i = 0; i < intCollection.Count(); i++)
    Console.WriteLine("值,索引位置为 {0} : {1}", i, intCollection.ElementAt(i));
输出:
总数:10
值,索引位置为 0: 10
值,索引位置为 1: 10
值,索引位置为 2: 10
值,索引位置为 3: 10
值,索引位置为 4: 10
值,索引位置为 5: 10
值,索引位置为 6: 10
值,索引位置为 7: 10
值,索引位置为 8: 10
值,索引位置为 9: 10

在上面的示例中,Enumerable.Repeat<int>(10, 10) 创建具有100个重复值为10的整数类型元素的集合,第一个参数指定所有元素的值,第二个参数指定要创建的元素数。