我有以下代码
foreach (var rssItem in rss.Channel.Items)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但是只想要6个项目而不是所有项目,我怎么能用C#做呢?
hac*_*sid 58
只是迭代集合中的前6位:
foreach(var rssItem in rss.Channel.Items.Take(6))
Run Code Online (Sandbox Code Playgroud)
Nic*_*ick 13
不要太明显,但......
int max = Math.Min(6, rss.Channel.Items.Count);
for (int i = 0; i < max; i++)
{
var rssItem = rss.Channel.Items[i];
//...
}
Run Code Online (Sandbox Code Playgroud)
我知道这是旧学校,并没有充满各种扩展方法的优点,但有时老学校仍然有效...特别是如果你还在使用.NET 2.0.
foreach(var rssItem in rss.Channel.Items.Take(6)) {
// go time!
}
Run Code Online (Sandbox Code Playgroud)
注意
rss.Channel.Items.Take(6)
Run Code Online (Sandbox Code Playgroud)
除了实例化IEnumerable可以迭代的实现以生成枚举中的前六个项目之外,它不执行任何操作.这是LINQ to Objects的延迟执行功能.
请进一步注意,这假定为.NET 3.5.如果您使用的是早期版本的.NET,则可以使用以下内容:
static IEnumerable<T> Take<T>(IEnumerable<T> source, int take) {
if (source == null) {
throw new ArgumentNullException("source");
}
if (take < 0) {
throw new ArgumentOutOfRangeException("take");
}
if (take == 0) {
yield break;
}
int count = 0;
foreach (T item in source) {
count++;
yield return item;
if (count >= take) {
yield break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后:
foreach(var rssItem in Take(rss.Channel.Items, 6)) {
// go time!
}
Run Code Online (Sandbox Code Playgroud)
这假设是.NET 2.0.如果您不使用.NET 2.0,则应认真考虑升级.
如果您不想使用 linq,也可以跳出循环。
int count = 0;
foreach (var rssItem in rss.Channel.Items)
{
if (++count == 6) break;
...
}
Run Code Online (Sandbox Code Playgroud)