繁体   English   中英

C#中的数组声明?

[英]Array declaration in C#?

说我创建声明一个数组:

byte[] Data = new byte[4];

然后,我处理数组,用一些值填充它,等等。在代码的后面,如果我说:

Data = new byte[16];

我在做什么:我是否要完全删除旧数组并创建一个具有16个索引的新空数组? 还是我保持与以前相同的数组,只是扩展索引的总数?

我在做什么:我是否要完全删除旧数组并创建一个具有16个索引的新空数组?

是。 旧的数组最终将被垃圾收集,然后“消失”(只要没有其他引用)。 您的新数组将不会保留任何原始值。

还是我保持与以前相同的数组,只是扩展索引的总数?

你不是。 如果您想要这种行为,请考虑改用List<byte> ,它的工作原理与数组非常相似,但是会根据需要增加。

您还可以使用Array.Resize(Data, 16)来“调整”数组的大小。 在内部,这将创建一个新数组,然后将值从旧数组复制到新数组,因此结果的长度为16,但仍保留原始的4个值。

您没有在增加现有阵列。 Data是一个引用,正在发生的事情是,您正在将该引用分配给一个新的内存块(已分配的byte[16] ),并且假设没有其他等于“ Data引用,您正在孤立先前的内存分配将导致其被垃圾回收。 如果说,你做到了;

var Data = new byte[4];
var Data1 = Data;
Data = new byte[16];

然后,直到Data1超出范围为止,原始的四个字节的内存才不会排队进行垃圾回收,因为您仍然可以引用该内存。

您正在创建一个新数组,并将其设置为旧数组的引用。

一旦所有引用都从一个对象中删除,垃圾收集器将其拾取并从内存中删除。

创建数组时,在这种情况下,将在内部创建Array类对象。

byte []数据=新的byte [4];

在这一行中,数据只是指向内存的参考变量。

数据=新字节[16];

当执行此语句时,意味着您已经创建了新数组并将其引用传递给Data引用变量。 现在它丢失了旧阵列,并指出了新阵列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM