创建Entry动态数组遇数组越界错误,求解决方案
解决数组越界问题的思路和修正代码
兄弟,你这代码明显踩了两个典型的数组越界坑,咱们一步步拆解问题,再给你修正方案:
为啥会报“Index was outside the bounds of the array”?
- 初始数组长度不匹配:你一开始创建的
entries是长度为1的数组(只有entries[0]是有效的),但你直接尝试给entries[2]赋值——数组根本没有索引2的位置,这直接就触发越界错误了。 - 循环长度与数组长度不匹配:后面的循环用
_CoinHistory.Count()作为循环次数,但你的entries数组长度还是1,只要_CoinHistory里的元素数量超过1,循环到i=1时,entries[1]不存在,必然再次报错。 - 额外小问题:你循环里一直取
_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
相关产品推荐
相关产品推荐

