2

考虑以下代码:

public static IEnumerable<float> Power(string ticker, float equity, float amount)
{
    for (int k = 0; MajicNumber(ref k, amount); )
    {
        yield return CalculateStats(ticker, equity, k);
        // Can we get the value of current resultset here?
    }
}

由于该函数正在维护结果集,我们可以访问它吗?

传统的对应物是:

public static IEnumerable<float> Power(string ticker, float equity, float amount)
{
    List<float> resultSet = new List<float>();
    for (int k = 0; MajicNumber(ref k, amount); )
    {
        resultSet.Add(CalculateStats(ticker, equity, k));
        // resultSet is accessible here
    }
    return resultSet;
}
4

2 回答 2

3

当然,你可以这样做。与第二个代码片段相比,逻辑没有太大变化,只是您yield return在找到答案时给出了答案:

public static IEnumerable<float> Power(string ticker, float equity, float amount)
{
    IList<float> resultSet = new List<float>();
    for (int k = 0; MajicNumber(ref k, amount); )
    {
        float r = CalculateStats(ticker, equity, k);
        resultSet.Add(r);
        yield return r;
    }
}
于 2012-10-02T15:53:56.843 回答
3

由于该函数正在维护结果集,我们可以访问它吗?

不,迭代器块维护任何结果集。

于 2012-10-02T15:54:01.873 回答