【问题标题】:Index Error in C# Where Array Should Return Empty Array But Returns Out Of RangeC# 中的索引错误,其中数组应返回空数组但返回超出范围
【发布时间】:2020-10-27 05:25:43
【问题描述】:

我是 C# 新手,遇到了一个错误,我需要让 DataPoints 数组返回空,但无论出于何种原因,我都会收到此错误。我在这里做错了什么?

索引超出范围。必须是非负数且小于 集合。\r\n参数名称:索引"

            var DataPoints = new DataPoints();
            // Generate DataPoints (or something similar) from the newly constructed WspViewList.
            foreach (WspViewRow row in dataPointBuilder)
            {
            
            var dataPointList = row.OriginalData.TrimStart('[').TrimEnd(']').Split(',').ToList();

            DataPoints.labels.Add(dataPointList[1]);

            for (var index = 2; index< dataPointList.Count; index++)
            {
                var dataPoint = dataPointList[index];
                if (string.IsNullOrEmpty(dataPoint))
                    continue;
                ChartDataObject cdo;
                if (DataPoints.datasets.Count <= index - 2)
                {
                    cdo = new ChartDataObject();
                    DataPoints.datasets.Add(cdo);
                    cdo.label = ColumnObjects[index].propertyName;
                }
                else
                    cdo = DataPoints.datasets[index - 2];

                cdo.data.Add(dataPoint);
                DataPoints.datasets[index - 2] = cdo;
            }
            
                DataPointAPI DataPointResponse = new DataPointAPI()
                {

                data = DataPoints,

                };

                dataset.Add(DataPointResponse);
            }

        // Set some class field to contain these datapoints
        ChartData = dataset;

【问题讨论】:

  • 看起来您正在将 JSON 作为纯字符串处理,而不是对其进行反序列化。这可能是防止该错误的好方法。
  • 我该如何解决这个问题?我是 C# 新手,所以我迷失在语法上
  • 在这一行:for (var index = 2;,您在 2 开始 index,而没有首先验证数组中是否有 2 个以上的项目。然后当你到达这里时:var dataPoint = dataPointList[index];,你得到了异常。要解决这个问题,请在访问硬编码索引之前检查数组中有多少项。
  • 这听起来是正确的@RufusL,我失去了如何检查有多少项目和它的样子。我对语法完全陌生,所以我理解但仍然有点迷茫

标签: c# asp.net


【解决方案1】:

当你得到异常时,你可以得到它发生的行号。您还可以使用 debbuger 来查看是否遗漏了什么。

实际上,您的异常是通过尝试访问您的数组/列表之外的数据而引发的。请记住,您的索引从 0 开始到 数组的总长度 - 1

var array = new []{1,2,3};
array[0] => 1
array[1] => 2
array[2] => 3
array[3] => out of range

【讨论】:

  • 如何在我的代码中解决这个问题?老实说,我不知道在哪里解决这个问题
  • 我想要做的是向 api 返回一个空数组是没有项目通过
  • 您可以将数组的长度与 if 中的 .Count / Length / Any() 进行比较,然后您可以使用“continue”关键字进行下一次迭代。
猜你喜欢
  • 2014-07-29
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-20
  • 1970-01-01
相关资源
最近更新 更多