Enumerable.Range的奇怪行为(开始,计数)

时间:2012-11-28 17:44:09

标签: c# .net range enumerable

  

可能重复:
  Enumerable giving unexpected output

看看我的代码。无论起始值是0,为什么Enumerable.Range()的行为都不同。

class Program
{
    static void Main(string[] args)
    {
        var range1 = Enumerable.Range(0, 7);
        PrintRange(range1);
        var range2 = Enumerable.Range(1, 8);
        PrintRange(range2);
        Console.ReadKey(true);
    }

    private static void PrintRange(IEnumerable<int> myRange)
    {
        foreach (int i in myRange)
        {
            Console.WriteLine("Linha {0}\n", i);
        }
        Console.WriteLine("\n========================================\n");
    }
}

范围本身是一样的。但是当它从1开始时,我得到一个更大的。 :( 结果如下:

Linha 0

Linha 1

Linha 2

Linha 3

Linha 4

Linha 5

Linha 6

========================================

Linha 1

Linha 2

Linha 3

Linha 4

Linha 5

Linha 6

Linha 7

Linha 8

========================================

2 个答案:

答案 0 :(得分:8)

第二个参数是count而非end

你的第一个电话相当于我希望7个连续的整数从0 开始,而第二个是我想要从1开始的8个连续整数。

MSDN Enumerable.Range

答案 1 :(得分:2)

public static IEnumerable<int> Range(
    int start,
    int count
)

第二个参数(count)表示:要生成多少个值。它不像起始值和结束值,而是起始数和值的数量,因此:

// generate 7 integers starting from 0
Enumerable.Range(0, 7)
// generate 8 integers starting from 1
Enumerable.Range(1, 8)