You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

创建Entry动态数组遇数组越界错误,求解决方案

解决数组越界问题的思路和修正代码

兄弟,你这代码明显踩了两个典型的数组越界坑,咱们一步步拆解问题,再给你修正方案:

为啥会报“Index was outside the bounds of the array”?

  1. 初始数组长度不匹配:你一开始创建的entries是长度为1的数组(只有entries[0]是有效的),但你直接尝试给entries[2]赋值——数组根本没有索引2的位置,这直接就触发越界错误了。
  2. 循环长度与数组长度不匹配:后面的循环用_CoinHistory.Count()作为循环次数,但你的entries数组长度还是1,只要_CoinHistory里的元素数量超过1,循环到i=1时,entries[1]不存在,必然再次报错。
  3. 额外小问题:你循环里一直取_CoinHistory[0].price_btc,这样所有Entry都会是同一个价格,应该取当前循环项的价格才对。

修正后的代码方案

推荐用List<Entry>动态构建元素,再转成数组(最灵活,不用提前操心长度):

// 创建动态列表来存放Entry,避免固定长度的限制
var entriesList = new List<Entry>();

foreach (var coinItem in _CoinHistory)
{
    // 用TryParse代替Parse,避免解析失败抛出异常
    if (float.TryParse(coinItem.price_btc, out var priceFloat))
    {
        entriesList.Add(new Entry(priceFloat));
    }
    else
    {
        // 解析失败时的兜底处理,比如添加0值或者跳过
        entriesList.Add(new Entry(0));
    }
}

// 转成MicroCharts需要的Entry数组
var entries = entriesList.ToArray();

如果一定要用固定长度数组,可以先根据_CoinHistory的长度创建数组:

var itemCount = _CoinHistory.Count();
// 提前创建对应长度的数组
var entries = new Entry[itemCount];

for (int i = 0; i < itemCount; i++)
{
    if (float.TryParse(_CoinHistory[i].price_btc, out var priceFloat))
    {
        entries[i] = new Entry(priceFloat);
    }
    else
    {
        entries[i] = new Entry(0);
    }
}

这两种写法都能彻底解决数组越界的问题,同时也修正了价格取值的错误,保证图表能正确显示每一项的数据。

内容的提问来源于stack exchange,提问作者Achiel Volckaert

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:31:39