C# “错误”;索引超出范围。必须为非负数且小于集合的大小。参数名称:index";

C# “错误”;索引超出范围。必须为非负数且小于集合的大小。参数名称:index";,c#,C#,我试着改变剧本 for (int ii = 0; ii < i_f.Length; ii++) for(int ii=0;ii

我试着改变剧本

for (int ii = 0; ii < i_f.Length; ii++)
for(int ii=0;ii
进入

for(int-ii=0;ii<100;ii++)
但我还是犯了同样的错误

索引超出范围。必须为非负数且小于集合的大小。参数名称:索引

float[]b=Enumerable.Range(01143600)。选择(j=>newfloat[100]).ToArray();
浮动[]i_f=新浮动[100];
List storerandomvalues=新列表(100);

公共浮点错误(int itemid)
{
浮动误差=0f;
float[]i_f=b[itemid];
对于(int ii=0;ii
看起来您没有向
storerandomvalues
列表中添加任何内容,您只是初始化了它的容量。列表(int)构造函数没有向列表添加任何内容,它只是使备份存储足够大,可以容纳100个项目。如果要将某些内容初始化为固定数量的项,则确实应该使用数组,而不是列表:

float[] storerandomvalues = new float[100];

或者,您应该调整循环条件,以便它检查
storerandomvalues
i\u f
的长度,以便索引不会偏离其中任何一个的范围。

如果确实要使用该索引器,则只需将该列表转换为数组即可。不要使用我自己发布的列表。这是一个完全不同的@AlexanderNo,完全相同。storerandomvalues[ii]-->这是错误的,集合长度小于该迭代
float[][] b = Enumerable.Range(0, 1143600).Select(j => new float[100]).ToArray();
float[] i_f = new float[100];
List<float> storerandomvalues = new List<float>(100);
public float Error(int itemid)
{
    float error= 0f;
    float[] i_f = b[itemid];
    for (int ii = 0; ii < i_f.Length; ii++)
    {
        error += storerandomvalues[ii] * i_f[ii];     //error line
    }
    error = 1-error;
    return error;
 }
float[] storerandomvalues = new float[100];