如何出于 JSON 原因将元素附加到 C# 数组?
Posted
技术标签:
【中文标题】如何出于 JSON 原因将元素附加到 C# 数组?【英文标题】:How to append an element to a C# array for JSON reasons? 【发布时间】: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
排在最后。
这能回答你的问题吗? What is an IndexOutOfRangeException / ArgumentOutOfRangeException and how do I fix it?
没有使用过 Web Essentials...看起来您真的希望该属性成为 List<Channel>
而不是数组...有什么理由可以'不只是改变属性类型?即使工具生成了您开始使用的类型,我希望您能够更改它。
数组在创建时可以是动态的,但一旦创建,它们的大小是固定的。所以添加一个元素,你必须创建一个比旧数组更大的新数组。
也许使用堆栈/队列代替?
【参考方案1】:
您无法调整固定大小数组的大小。数组始终具有固定大小
这里最好的解决方案是使用List<Channel>
而不是Channel[]
。
否则你可以创建一个大小为前一个加一的新数组,并通过最后一个数组索引设置添加值,但我认为它会很脏。
这里是关于数组的 msdn 文档:Array 就是这么说的
与 System.Collections 命名空间中的类不同,Array 具有固定容量。要增加容量,您必须创建一个具有所需容量的新 Array 对象,将旧 Array 对象中的元素复制到新 Array 对象中,并删除旧 Array。
【讨论】:
感谢您的快速回复。为了自动完成这项工作,我在 Web Essentials 上开了一个新问题:github.com/madskristensen/WebEssentials2013/issues/2031。以上是关于如何出于 JSON 原因将元素附加到 C# 数组?的主要内容,如果未能解决你的问题,请参考以下文章