检索IEnumerable的方法参数

eth*_*th0 4 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
    }
}
Run Code Online (Sandbox Code Playgroud)

我会这样称呼它:Class.GetList(10);它会返回10个项目 - 这很好.

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

多谢你们!

Mar*_*ers 6

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

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

当您Take(10)只调用前10个元素时,将不会运行该方法的其余部分.