【发布时间】:2020-11-06 23:06:21
【问题描述】:
我正在编写一个程序,其中的一个函数为了正确创建要发送的消息,不断调用我生成的函数以将每个部分添加到数组中。问题是,在 C# 中你不能这样做,因为字节数组(如果我没记错的话,任何类型的数组)都有一个无法更改的有限长度。
因此,我想到了创建 2 字节变量。第一个将获得第一个值。第二个将在您知道必须添加的新字节数量后创建,之后,您将删除第一个变量并再次创建它,使用前一个变量的长度,但添加新值的长度,对第二个变量做同样的事情。我生成的代码是:
byte[] message_mod_0 = adr_and_func;
byte[] byte_memory_adr = AddAndTypes.ToByteArray(memory_adr);
byte[] message_mod_1 = new byte[2 + byte_memory_adr.Length];
message_mod_1 = AddAndTypes.AddByteArrayToByteArray(message_mod_0, byte_memory_adr);
AddAndTypes.AddByteArrayToByteArray(message_mod_0, AddAndTypes.IntToByte(value));
byte[] CRC = Aux.CRC(message_mod_0);
AddAndTypes.AddByteArrayToByteArray(message_mod_0, CRC);
在这段代码中,我所说的两个变量是 message_mod_0 和 message_mod_1。我还考虑执行删除和重新声明所需的 byte_memory_adr 变量,以便知道要添加到输出消息中的字节数组的长度。
参数 adr_and_func、memory_adr 和 value 作为我正在制作的函数的输入参数给出。
问题可以概括为:有什么方法可以删除与创建它们相同的范围内的变量?而且,如果可以做到的话,如果我在删除第一个变量后创建了一个同名的新变量,会有什么问题吗?我想不出为什么会发生这种情况,但我对这种编程语言还是很陌生。
另外,我不知道是否有任何不那么混乱的方法。
【问题讨论】:
-
1) 查看垃圾收集在 .NET 中的工作方式。 2)通过将变量设置为
null来取消引用内存。 -
您可以使用
List<byte>轻松形成一个数据包,然后在发送之前将其转换为ToArray()。也可以保留数组和resize it。 -
1) 您不能在 C# 中手动删除变量(如果可以的话,它就不是托管语言);2) 您可以重用变量,也就是说,如果它们是相同的类型,您可以将变量重新分配给新值
-
我不确定您要做什么(甚至更不确定您要问什么),但看起来您正在尝试重新实现
List<byte>或MemoryStream。您可能只想使用这些类型...