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

確かに、あなたはそれを行うことができます。ロジックは2番目のコードスニペットからあまり変わりませんが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 に答える