【问题标题】:How to append an element to a C# array for JSON reasons?如何出于 JSON 原因将元素附加到 C# 数组?
【发布时间】: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&lt;Channel&gt; 而不是数组...有什么理由可以'不只是改变属性类型?即使工具生成了您开始使用的类型,我希望您能够更改它。
  • 数组在创建时可以是动态的,但一旦创建,它们的大小是固定的。所以添加一个元素,你必须创建一个比旧数组更大的新数组。
  • 也许使用堆栈/队列代替?

标签: c# arrays json indexoutofrangeexception


【解决方案1】:

您无法调整固定大小数组的大小。数组始终具有固定大小

这里最好的解决方案是使用List&lt;Channel&gt; 而不是Channel[]

否则你可以创建一个大小为前一个加一的新数组,并通过最后一个数组索引设置添加值,但我认为它会很脏。

这里是关于数组的 msdn 文档:Array 就是这么说的

与 System.Collections 命名空间中的类不同,Array 具有固定容量。要增加容量,您必须创建一个具有所需容量的新 Array 对象,将旧 Array 对象中的元素复制到新 Array 对象中,并删除旧 Array。

【讨论】:

猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 2021-07-04
  • 1970-01-01
  • 1970-01-01
  • 2018-08-27
  • 2020-04-03
  • 2018-08-18
  • 2014-02-24
相关资源
最近更新 更多