Tho*_*eld 15 .net c# linq enumerable.range
如果Start=0
和Count=10
那么如何使用获得替代值Enumerable.Range()
的放出来应该是这样的{ 0, 2, 4, 6, 8 }
如果Start=1
和Count=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)
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)
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.
据我所知,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
。
归档时间: |
|
查看次数: |
11752 次 |
最近记录: |