【发布时间】: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,我失去了如何检查有多少项目和它的样子。我对语法完全陌生,所以我理解但仍然有点迷茫