我有以下代码
foreach (var rssItem in rss.Channel.Items)
{
// ...
}
但是只想要6个项目而不是所有项目,我怎么能用C#来做?
答案 0 :(得分:55)
只是从集合中迭代前6位:
foreach(var rssItem in rss.Channel.Items.Take(6))
答案 1 :(得分:13)
不要太明显但是......
int max = Math.Min(6, rss.Channel.Items.Count);
for (int i = 0; i < max; i++)
{
var rssItem = rss.Channel.Items[i];
//...
}
我知道这是旧学校,并没有充满各种扩展方法的优点,但有时旧学校仍然有效...特别是如果你还在使用.NET 2.0。
答案 2 :(得分:5)
foreach(var rssItem in rss.Channel.Items.Take(6)) {
// go time!
}
请注意
rss.Channel.Items.Take(6)
除了实例化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;
}
}
}
然后:
foreach(var rssItem in Take(rss.Channel.Items, 6)) {
// go time!
}
这假设是.NET 2.0。如果您不使用.NET 2.0,则应认真考虑升级。
答案 3 :(得分:4)
如果您对某个条件感兴趣(例如按创建日期排序)
foreach(var rssItem in rss.Channel.Items.OrderByDescending(x=>x.CreateDate).Take(6))
{
//do something
}
也许如果你想获得由特定用户创建的那些,具有相同的排序
foreach(var rssItem in rss.Channel.Items
.Where(x=>x.UserID == 1)
.OrderByDescending(x=>x.CreateDate)
.Take(6))
{
//do something
}
答案 4 :(得分:4)
如果你不想使用linq,你也可以摆脱循环。
int count = 0;
foreach (var rssItem in rss.Channel.Items)
{
if (++count == 6) break;
...
}
答案 5 :(得分:3)
rss.Channel.Items.Take(6)