C# – TakeWhile和SkipWhile没有回来?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C# – TakeWhile和SkipWhile没有回来?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2006字,纯文字阅读大概需要3分钟。
内容图文
我有一个RekenReeks类,它返回从2开始的数字,乘以2.所以{2,4,8,16,32,64}
现在我了解了TakeWhile和SkipWhile方法以及LINQ.
所以我创建了3个变量应该存储完全相同,但我的Console.WriteLine只打印selection1而不是2和3.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
RekenReeks reeks = new RekenReeks(2, n => n * 2);
var selection = from i in reeks
where i > 10
&& i < 1000
select i;
var selection2 = reeks.TakeWhile(n => n < 1000 && n > 10);
var selection3 = reeks.SkipWhile(n => n > 1000 && n < 10);
foreach (int i in selection)
{
Console.WriteLine("selection1 {0}",i);
}
foreach (int i in selection2)
{
Console.WriteLine("selection2 {0}", i);
}
foreach (int i in selection3)
{
Console.WriteLine("selection3 {0}", i);
}
Console.ReadLine();
}
}
public class RekenReeks : IEnumerable<int>
{
Func<int, int> getNew;
int number;
public RekenReeks(int starton, Func<int, int> getNewThing)
{
getNew = getNewThing;
number = starton;
}
public IEnumerator<int> GetEnumerator()
{
yield return number;
for (; ; )
{
yield return getNew(number);
number = getNew(number);
}
}
System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
{
return this.GetEnumerator();
}
}
}
解决方法:
TakeWhile()和SkipWhile()都从序列的最开始开始,当条件不满足时停止进行/跳过.
// I've redesigned your ReekenReeks
// [2, 4, 8, 16, 32, 64, ..., 2**30]
var reeks = Enumerable
.Range(1, 30)
.Select(index => 1 << index);
例如,如果你放
var selection2 = reeks
.TakeWhile(n => n < 1000 && n > 10);
因为臭气的第1项是2,所以条件n <1. 1000&& n> 10不符合TakeWhile停止并返回空序列.正确的实施是
var selection2 = reeks
.SkipWhile(n => n <= 10)
.TakeWhile(n => n < 1000);
如果要从序列中间切除值(selection3),则必须使用Where:
var selection3 = reeks
.Where(n => !(n > 1000 && n < 10)); // cut theses items off
打印出无限序列时要小心.Take()是一个不错的选择:
var selection3 = reeks
.Where(n => n > 1000 && n < 10)
.Take(100); // First 100 items in case the sequence is too long
内容总结
以上是互联网集市为您收集整理的C# – TakeWhile和SkipWhile没有回来?全部内容,希望文章能够帮你解决C# – TakeWhile和SkipWhile没有回来?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。