检索IEnumerable的方法参数

时间:2010-11-13 21:26:14

标签: c# ienumerable

考虑这种方法:

public IEnumerable<T> GetList(int Count)
{
    foreach (var X in Y)
    {
        // do a lot of expensive stuff here (e.g. traverse a large HTML document)
        // when we reach "Count" then exit out of the foreach loop
    }
}

我会这样称呼:Class.GetList(10);会返回10件物品 - 这很好。

我想使用IEnumerable的{​​{1}}方法代替我使用Take(),我希望foreach循环能够以某种方式获取我传入{{1}的数字}} - 这可能吗?这似乎是一种更清洁的方法,因为它最终会更便宜,因为我可以使用Class.GetList().Take(10)一次获取完整列表,然后使用Take()的方法来获取x项。

谢谢你们!

3 个答案:

答案 0 :(得分:6)

您可以通过将方法实现为迭代器块来实现:

public IEnumerable<T> GetList()
{
    foreach (var X in Y)
    {
        // do something
        yield return something;
    }
}

当你致电Take(10)时,只会产生前10个元素 - 方法的其余部分将不会被运行。

答案 1 :(得分:4)

GetList方法中使用yield return。这样,您可以使用Take(10)而不使用GetList方法首先返回整个结果。

答案 2 :(得分:1)

不,这是不可能的。但是,Take(10)所做的是它只获得Enumerable的10个项目。通过Count检查您要完成的任务,Take()会为您执行此操作,因为当它有10个项目时,它会直接停止从您的枚举器中获取项目。