如何使用Enumerable.Range获取备用号码?

Tho*_*eld 15 .net c# linq enumerable.range

如果Start=0Count=10那么如何使用获得替代值Enumerable.Range() 的放出来应该是这样的{ 0, 2, 4, 6, 8 }

如果Start=1Count=10{ 1, 3, 5, 7, 9 }

连续值可以得到

var a = Enumerable.Range(0,10).ToList();
Run Code Online (Sandbox Code Playgroud)

但如何获得替代值?

lep*_*pie 48

将Range应生成的项目数量(其第二个参数)减半,然后将结果值加倍,将得到正确的项目数并确保增量为2.

Enumerable.Range(0,5).Select(x => x * 2)
Run Code Online (Sandbox Code Playgroud)

  • 奇数留下作为读者的练习. (18认同)
  • 我不知道我在想什么!我的选票被锁定,直到答案被编辑,所以我添加了一个解释,以便我可以撤消它。我很抱歉! (2认同)

aba*_*hev 35

Enumerable.Range(0, 10).Where(i => i % 2 == 0); // { 0, 2, 4, 6, 8 }
Enumerable.Range(0, 10).Where(i => i % 2 != 0); // { 1, 3, 5, 7, 9 }
Run Code Online (Sandbox Code Playgroud)

  • 这是最好的答案.我想补充一点,你可以将它用于任何增量,并且它创造了一个硬编码跳过其他所有元素的自定义类.例如,如果我正在编写用于在TimeSpan中选择分钟的代码,并且我只想显示15分钟的增量:Enumerable.Range(0,60).Where(i => i%15 == 0) (2认同)

Che*_*hen 8

count代码中的参数看起来像end循环的一个点.

public static MyExt
{
  public static IEnumerable<int> Range(int start, int end, Func<int, int> step)
  {
    //check parameters
    while (start <= end)
    {
        yield return start;
        start = step(start);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

用法:MyExt.Range(1, 10, x => x + 2)返回1到10之间的数字,步骤2 MyExt.Range(2, 1000, x => x * 2)返回2到1000之间的数字,每次乘以2.


Øyv*_*hen 2

据我所知,BCL 中不存在您所追求的内容,因此您必须像这样创建自己的静态类来实现所需的功能:

public static class MyEnumerable {
  public static IEnumerable<int> AlternateRange(int start, int count) {
    for (int i = start; i < start + count; i += 2) {
      yield return i;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你可以在任何你想要的地方使用它:

foreach (int i in MyEnumerable.AlternateRange(0, 10)) {
  //your logic here
}
Run Code Online (Sandbox Code Playgroud)

然后您还可以使用它执行 LINQ 查询,因为它返回 IEnumerable

因此,如果你想排除数字 6,你也可以这样写上面的内容

foreach (int i in MyEnumerable.AlternateRange(0, 10).Where( j => j != 6)) {
  //your logic here
}
Run Code Online (Sandbox Code Playgroud)

我希望这就是你所追求的。

您不能Enumerable直接将其作为类的扩展方法,因为它是静态类,并且扩展方法适用于类的对象,而不是类本身。这就是为什么如果您想模仿该类,则必须创建一个新的静态类来保存此方法Enumerable

  • 这个解决方案远不如leppie 或abatishchev 的底层解决方案那么好。 (2认同)