C# 列表值范围之外的最大值
我试图从最后五个HSwDMI列表值中找出最大值,但我不确定我的for()循环是否正确。 我本以为我可以用一个函数来给出过去五年中的最高值,但我什么也找不到 另外,下面的代码抛出错误“使用未分配的局部变量newHSwDMI”,我不太明白为什么。 不过,当我在类级别声明newHSwDMI时,它就起作用了 如有任何建议,将不胜感激C# 列表值范围之外的最大值,c#,list,max,C#,List,Max,我试图从最后五个HSwDMI列表值中找出最大值,但我不确定我的for()循环是否正确。 我本以为我可以用一个函数来给出过去五年中的最高值,但我什么也找不到 另外,下面的代码抛出错误“使用未分配的局部变量newHSwDMI”,我不太明白为什么。 不过,当我在类级别声明newHSwDMI时,它就起作用了 如有任何建议,将不胜感激 private List<double> HSwDMI; HSwDMI = new List<double>(); .... if ((!HSwDM
private List<double> HSwDMI;
HSwDMI = new List<double>();
....
if ((!HSwDMIbool && DMI1[2] - DMI1[1] > 0.001 && DMI1[2] - DMI1[3] > 0.001)
|| (!HSwDMIbool && FlatIndBar && FlatDMI[a-1] - DMI1[1] > 0.001 && FlatDMI[a-1] - DMI(Closes[2],
Convert.ToInt32(DmiPeriod)).Values[0].GetValueAt(flatDMIbar - 1) > 0.001))
{
var hSwDMI = DMI1[2];
HSwDMI.Add(hSwDMI);
HSwDMIbar = CurrentBar - 2;
var hSwDMIprice = Highs[2].GetValueAt(HSwDMIbar);
HSwDMIprice.Add(hSwDMIprice);
HSwDMIbool = true;
b++;
}
if (HSwDMIbool)
{
double newHSwDMI;
for ( int i = 1; i <= 5; i++)
{
if (HSwDMI[i] > HSwDMI[i-1])
newHSwDMI = HSwDMI[i];
}
LastHSwDMI.Add(newHSwDMI);
}
私有列表HSwDMI;
HSwDMI=新列表();
....
如果(!HSwDMIbool&&DMI1[2]-DMI1[1]>0.001&&DMI1[2]-DMI1[3]>0.001)
||(!HSwDMIbool&&FlatIndBar&&FlatDMI[a-1]-DMI1[1]>0.001&&FlatDMI[a-1]-DMI(关闭[2],
转换.ToInt32(DmiPeriod)).Values[0].GetValueAt(flatDMIbar-1)>0.001)
{
var hSwDMI=DMI1[2];
添加(HSwDMI);
HSwDMIbar=电流棒-2;
var hSwDMIprice=高[2]。GetValueAt(HSwDMIbar);
添加(HSwDMIprice);
HSwDMIbool=true;
b++;
}
if(HSwDMIbool)
{
双新HSWDMI;
对于(int i=1;i HSwDMI[i-1])
newHSwDMI=HSwDMI[i];
}
添加(newHSwDMI);
}
通过使用linq,您可以执行以下操作
var listCount = HSwDMI.Count;
var maxValueInHswDMI = HSwDMI.Skip(listCount-5).Max();
// HSWDMI.Skip(x) skips x amount of items in the list and max returns the max value among the remaining items..
希望这有帮助
newHSwDMI
是在if(HSwDMIbool)
中声明的,但在该范围之外引用,因此不在范围之内。没有地方可以访问最后5个元素。(从List.Count-5到List.Count-1)。检查前6个元素,从0到5。如果循环中的if(HSwDMI[i]>HSwDMI[i-1])
从来都不是true
,那么newHSwDMI
将永远不会被赋值。通常通过在循环之前指定第一个值,然后在第二个值处开始循环来解决此问题<代码>双新HSwDMI=HSwDMI[0];对于(int i=1;…感谢您的回答。是否有任何方法也可以获取该最大值的HSwDMI列表索引?var index=HSDMI.IndexOf(HSwDMI.Skip(listCount-5.Max());类似于