确定返回Enumerable.Range()

时间:2019-02-02 12:38:07

标签: c# linq ienumerable

试图了解哪种数据类型在下面的示例中返回Enumerable.Range()函数:

var numbers = Enumerable.Range(0, 100000000);
Console.WriteLine( numbers.GetType().FullName );

根据描述,它应该返回IEnumerable<int>。但是根据我的理解,这只是接口,返回的对象类应实现此接口。那是什么东西?

控制台输出带来

System.Linq.Enumerable+<RangeIterator>d__113

我无法确定我可以放置什么类型而不是在代码行中放置var。我在MSDN中根本找不到RangeIterator类型。 d__113在此输出中意味着什么?

1 个答案:

答案 0 :(得分:2)

如果您查看有问题的代码的源代码,那么它就可以揭示出实际发生的情况

来源Enumerable.Range

public static IEnumerable<int> Range(int start, int count) {
    long max = ((long)start) + count - 1;
    if (count < 0 || max > Int32.MaxValue) throw Error.ArgumentOutOfRange("count");
    return RangeIterator(start, count);
}

static IEnumerable<int> RangeIterator(int start, int count) {
    for (int i = 0; i < count; i++) yield return start + i;
}
  

我不知道可以代替代码行中的var放置什么类型

只需使用IEnumerable<int>

IEnumerable<int> numbers = Enumerable.Range(0, 100000000);