【发布时间】:2021-08-28 05:56:30
【问题描述】:
我仍在研究我的 JSON 解析器和编写器。
使用 Visual Studio Web Essentials,我创建了一个类图,其中包含一些我可以放置信息的数组,例如:
public Channel[] channels { get; set; }
如您所见,这是一个没有预定义大小的数组(动态数组),现在我想在这个数组中添加一些东西,但这似乎并不那么简单:this post,称为“将值添加到C# Array”提到了如何做到这一点:
- 如果数组大小已知(这不是我的情况),有很多解决方案。
- 使用中间容器(
List)....抱歉,我想避免来回复制我的数据,这看起来像是一场性能噩梦。 - 使用
Add()方法。我没有Add()方法。 - 使用
Resize()方法。我没有Resize()方法。 - 使用
using System.Linq;,可以使用Append()等方法。抱歉,using子句存在,但我没有Append()方法。 - 做一些
Enumarable...ToArray():这看起来也像来回复制数据,就像另一个性能噩梦。
我不敢相信 Web Essentials 决定使用动态数组,却没有想到一种简单的方法来操作这些数组。有人有想法吗?
特此摘录我的源代码,抛出一个 IndexOutOfRangeException:
root.<stuff>.channels[root.<stuff>.channels.Length] = new Channel();
我检查了IsFixedSize 属性:它是true 并且是只读的。
哦,我正在使用 Visual Studio Enterprise 2019,我的 .Net 目标框架似乎是 4.6.1,这似乎是最高版本,安装在我的 PC 上。
提前致谢
【问题讨论】:
-
使用索引操作时,
Length - 1排在最后。 -
没有使用过 Web Essentials...看起来您真的希望该属性成为
List<Channel>而不是数组...有什么理由可以'不只是改变属性类型?即使工具生成了您开始使用的类型,我希望您能够更改它。 -
数组在创建时可以是动态的,但一旦创建,它们的大小是固定的。所以添加一个元素,你必须创建一个比旧数组更大的新数组。
-
也许使用堆栈/队列代替?
标签: c# arrays json indexoutofrangeexception