如何使用可变步数获得可枚举范围

One*_*era 1 .net c# linq enumerable enumerable.range

我正在尝试获取一个列表,范围从具有可变步数的最小值和最大值。

例如:如果我设置最小值为 10,000,最大值为 150,000,步数为 20,000。我应该能够得到列表为 [10000,30000,50000,70000,...,150000]。

类似地,如果步数设置为 15,000 - 我应该得到列表为 [10000,25000,40000,...,145000]

 int min = 10000;
 int max = 150000;
 int step = 20000;

 var result = Enumerable.Range( min, max).Where(i => i<= max && (i % step == 0));
 foreach (int num in result) { Console.WriteLine(num); } // output: [20000,40000,60000,80000,100000,120000,140000]
Run Code Online (Sandbox Code Playgroud)

由于我使用模数运算符来等于零值,因此它跳过了范围中的第一个值,并给出了上述结果而不是 [10000,30000,..,150000]。由于我对 C# 编程非常陌生,任何人都可以用上面的代码纠正我以获得所需的输出。

PS:我已经提到了这个线程如何使用 Enumerable.Range 获取备用数字?但无法找到答案。

The*_*ias 5

创建自定义迭代器可能比重用现有Enumerable.Range方法更容易。

public static IEnumerable<int> Range(int min, int max, int step)
{
    for (int i = min; i <= max; i = checked(i + step)) yield return i;
}
Run Code Online (Sandbox Code Playgroud)