C# 带收益表的IEnumerable

C# 带收益表的IEnumerable,c#,.net,syntax,C#,.net,Syntax,考虑以下代码: 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 curre

考虑以下代码:

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?
    }
}
公共静态IEnumerable Power(字符串代码器、浮动权益、浮动金额)
{
对于(整数k=0;主要编号(参考k,金额);)
{
收益率-收益率计算表(股票、股票、k);
//我们能在这里得到当前结果集的值吗?
}
}
由于函数正在维护结果集,我们可以访问它吗

传统的对应物是:

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;
}
公共静态IEnumerable Power(字符串代码器、浮动权益、浮动金额)
{
列表结果集=新列表();
对于(整数k=0;主要编号(参考k,金额);)
{
结果集添加(计算数据(股票、股票、k));
//结果集可在此处访问
}
返回结果集;
}

当然,你可以做到。与第二个代码片段相比,逻辑没有太大变化,只是
在找到答案时返回:

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;
    }
}
公共静态IEnumerable Power(字符串代码器、浮动权益、浮动金额)
{
IList resultSet=新列表();
对于(整数k=0;主要编号(参考k,金额);)
{
浮动r=计算资产(股票、权益、k);
结果集。添加(r);
收益率r;
}
}
由于函数正在维护结果集,我们可以访问它吗


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

第二个示例应该是
列表
而不是
数组列表
。@JamesMichaelHare,谢谢修复。访问结果集时您想做什么?出于某种原因,您想访问以前的值吗?如果是这样的话,
收益率
模型未必是实现这一目标的最佳方式。如果您出于某种原因想要更改以前的值,那么
收益率回报率肯定不是您想要的。如果后一个代码符合您的要求,那么为什么您要将其更改为前一个样式(假设这里就是这样的情况)。我正在尝试对现有代码进行最小更改(使用yield)以执行给定任务。+1,谢谢,这是否意味着它也将忽略
yield return之后的语句。
?yield return之后的语句也将被忽略executed@PHeiberg,那么我们可以知道
CalculateStats(股票代码、股票净值、k)的返回值吗
after
yield return
语句而不存储到变量中?如果要在返回后退出执行,则需要调用yield break。@vulcanraven否,如果不将其存储到变量中,则无法找到函数刚刚生成的值
yield return
-ed。可以说,没有必要为此提供“神奇的方法”,因为功能可以通过简单的变量声明来实现。