Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/334.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#代码中的ArgumentOutOfRangeException错误_C#_Indexoutofrangeexception - Fatal编程技术网

我的C#代码中的ArgumentOutOfRangeException错误

我的C#代码中的ArgumentOutOfRangeException错误,c#,indexoutofrangeexception,C#,Indexoutofrangeexception,这些天我在学C#,还是个初学者 在练习创建方法时,我创建了这个方法,它可以生成数字数组成员的总和(我的代码太多,我的数学不好)。 VS返回ArgumentOutOfRangeException错误,但我不知道如何修复此错误。 请救救我 public static int SumAll(int[] a) { List<int> sum = new List<int>(); int sumAll; if (a.

这些天我在学C#,还是个初学者

在练习创建方法时,我创建了这个方法,它可以生成数字数组成员的总和(我的代码太多,我的数学不好)。 VS返回ArgumentOutOfRangeException错误,但我不知道如何修复此错误。 请救救我

  public static int SumAll(int[] a)
    {
        List<int> sum = new List<int>();
        int sumAll;



        if (a.Length == 0)
        {
            sumAll = 0;
        }
        else
        {
            sum[0] = a[0];


            for (int i = 1; i < (a.Length - 1); i++)
            {
                sum[i] = sum[i - 1] + a[i];
            }

            sumAll = sum[a.Length - 1];
        }
        return sumAll;  
    }
publicstaticintsumall(int[]a)
{
列表总和=新列表();
内苏马尔;
如果(a.Length==0)
{
sumAll=0;
}
其他的
{
和[0]=a[0];
对于(int i=1;i<(a.长度-1);i++)
{
和[i]=和[i-1]+a[i];
}
sumAll=总和[a.长度-1];
}
返回sumAll;
}

使用+=

publicstaticintsumall(int[]a)
{
int-sumAll=0;
对于(int i=0;i<(a.Length-1);i++)
{ 
sumAll+=a[i];
}
返回sumAll;
}

ArgumentOutOfRangeException通常用于处理数组、集合或列表范围之外的项。。因为您使用的是
列表总和
,所以您没有向其中添加项目<代码>总和加(a[i])这就是为什么会出现异常;sum变量没有任何项。

出现该异常的原因是,当您执行此操作时,试图为列表中尚不存在的索引赋值:

sum[0] = a[0];
相反,您应该只使用
.Add
方法将项目添加到列表中。一旦添加了它们,您就可以通过索引访问它们。原因是列表没有预先填充到任何设置大小(而数组是),因此首先在
[0]
中没有任何内容

sum.Add(a[0]);
您还将在此处获得此异常:

sumAll = sum[a.Length - 1];
这是因为
sum
列表将只包含
a.Length-2
项(当
i==a.Length-1
时,循环停止)。这是你代码中的一个bug!您应该使用
i
作为条件:

for (int i = 1; i < a.Length; i++)
现在,如果您愿意,可以简化此代码,方法是删除列表,从
sumAll=0
开始,然后将
a
中的每个项目添加到循环中:

public static int SumAll(int[] a)
{
    if (a == null) return 0;

    int sumAll = 0;

    for (int i = 0; i < a.Length; i++)
    {
        sumAll += a[i];
    }

    return sumAll;
}

您的列表
sum
为空,您尝试使用
sum[0]
访问缺少的第一个元素。另外,仅仅添加所有元素不需要求和列表,您可以使用
sumAll
来完成。但是,如果仍要使用
sumAll
,请使用
list sum=new list()初始化列表并替换行
sum[i]=sum[i-1]+a[i]
sum[i]=sum[i]+sum[i-1]感谢您的详细解释!!这真的帮了大忙!!
public static int SumAll(int[] a)
{
    if (a == null) return 0;

    List<int> sum = new List<int>();
    int sumAll;

    if (a.Length == 0)
    {
        sumAll = 0;
    }
    else
    {
        sum.Add(a[0]);


        for (int i = 1; i < a.Length; i++)
        {
            sum.Add(sum[i - 1] + a[i]);
        }

        sumAll = sum[a.Length - 1];
    }

    return sumAll;
}
public static int SumAll(int[] a)
{
    if (a == null) return 0;

    int sumAll = 0;

    for (int i = 0; i < a.Length; i++)
    {
        sumAll += a[i];
    }

    return sumAll;
}
public static int SumAll(int[] a)
{
    return a == null ? 0 : a.Sum();
}