3 回答
TA贡献1824条经验 获得超8个赞
如果你想模仿你的程序代码,你可以使用TakeWhile:
Enumerable.Range(0, int.MaxValue).
Select(i => startValue + (i * increment)).
TakeWhile(i => i <= endValue);
但在我看来,这在性能和可读性方面更糟糕。
TA贡献1818条经验 获得超8个赞
尝试Enumerable.Range以模拟for循环:
int startingValue = 1;
int endValue = 13;
int increment = 5;
var result = Enumerable
.Range(0, (endValue - startingValue) / increment + 1)
.Select(i => startingValue + increment * i);
Console.Write(string.Join(", ", result));
结果:
1, 6, 11
TA贡献1824条经验 获得超5个赞
不需要在 LINQ中做任何事情才能像Linq一样可用,你可以非常接近你的原始版本:
IEnumerable<int> CustomSequence(int startingValue = 1, int endValue = 13, int increment = 5)
{
for (int i = startingValue; i <= endValue; i += increment)
{
yield return i;
}
}
像这样称呼
var numbers = CustomSequence();
或对其进行任何进一步的 LINQ:
var firstTenEvenNumbers = CustomSequence().Where(n => n % 2 == 0).Take(1).ToList();
- 3 回答
- 0 关注
- 272 浏览
添加回答
举报