Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 列表值范围之外的最大值_C#_List_Max - Fatal编程技术网

C# 列表值范围之外的最大值

C# 列表值范围之外的最大值,c#,list,max,C#,List,Max,我试图从最后五个HSwDMI列表值中找出最大值,但我不确定我的for()循环是否正确。 我本以为我可以用一个函数来给出过去五年中的最高值,但我什么也找不到 另外,下面的代码抛出错误“使用未分配的局部变量newHSwDMI”,我不太明白为什么。 不过,当我在类级别声明newHSwDMI时,它就起作用了 如有任何建议,将不胜感激 private List<double> HSwDMI; HSwDMI = new List<double>(); .... if ((!HSwDM

我试图从最后五个HSwDMI列表值中找出最大值,但我不确定我的for()循环是否正确。 我本以为我可以用一个函数来给出过去五年中的最高值,但我什么也找不到

另外,下面的代码抛出错误“使用未分配的局部变量newHSwDMI”,我不太明白为什么。 不过,当我在类级别声明newHSwDMI时,它就起作用了

如有任何建议,将不胜感激

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());类似于