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)的返回值吗
afteryield return
语句而不存储到变量中?如果要在返回后退出执行,则需要调用yield break。@vulcanraven否,如果不将其存储到变量中,则无法找到函数刚刚生成的值yield return
-ed。可以说,没有必要为此提供“神奇的方法”,因为功能可以通过简单的变量声明来实现。