如何动态声明decimal数组并添加值?遇Append方法报错求解
问题解决:C#动态构建decimal数组并传递给Chart.js
问题根源
decimal[]是固定长度的数组,本身没有Append方法;你调用的Append是LINQ扩展方法,它不会修改原数组,而是返回一个新的IEnumerable<decimal>,且你没有将返回结果重新赋值给数组。另外,1011.11默认是double类型,直接添加到decimal集合会触发隐式转换,建议加m后缀明确标记为decimal类型。
解决方案
方案1:用List<decimal>动态添加(推荐,适合频繁添加元素场景)
List<T>是专为动态集合设计的类型,添加元素性能更高,最后只需转成数组即可:
// 初始化动态集合 var dataList = new List<decimal>(); // 添加decimal类型元素(加m后缀) dataList.Add(1011.11m); dataList.Add(2022.22m); // 转成decimal[]用于Chart.js的匿名类型 decimal[] data = dataList.ToArray();
方案2:用LINQ的Append链式构建(适合少量元素添加)
如果只是少量元素添加,可以用LINQ的Append方法,但每次都要将结果转成数组并重新赋值:
decimal[] data = new decimal[]{}; // Append返回新的IEnumerable,必须转成数组赋值回去 data = data.Append(1011.11m).ToArray(); // 链式添加更多元素 data = data.Append(2022.22m).Append(3033.33m).ToArray();
整合到Chart.js匿名类型的完整代码
以方案1为例,完整代码如下:
var dataList = new List<decimal>(); dataList.Add(1011.11m); dataList.Add(2022.22m); decimal[] data = dataList.ToArray(); Datasets = new[] { new { label = "My First dataset", backgroundColor = "rgba(255, 99, 132, 0.5)", borderColor = "rgb(255, 99, 132)", data = data, fill = true, }, };
内容的提问来源于stack exchange,提问作者Musaffar Patel
相关产品推荐
相关产品推荐

