将一个字节数组初始化为一个特定的值,而不是默认的null?

我正忙着把一个用C++完成的旧项目改写成C#。

我的任务是重写程序,使其功能尽可能地接近原版。

在一堆文件处理过程中,以前写这个程序的开发者创建了一个包含大量字段的结构,这些字段对应于文件必须写入的设定格式,所以所有这些工作都已经为我完成了。

这些字段都是字节数组。然后C++代码所做的是使用memset将整个结构设置为所有空格字符(0x20)。一行代码。很简单。

这是非常重要的,因为这个文件最终会被送到实用程序中,希望文件是这种格式。我不得不做的是在C#中把这个结构改成一个类,但我找不到一种方法来轻松地把这些字节数组中的每一个都初始化为所有空格字符。

我最终不得不在类的构造函数中这样做。

//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
    UserCode[index] = 0x20;
    index++;
}

这样做很好,但我相信一定有更简单的方法来做到这一点。当数组被设置为UserCode = new byte[6]时,在构造函数中,字节数组被自动初始化为默认的空值。有没有办法让它在声明时变成所有的空格,这样当我调用类的构造函数时,它就会像这样直接被初始化?或者使用类似于 "memset "的函数?

首先使用这个来创建数组。

byte[] array = Enumerable.Repeat((byte)0x20, ).ToArray();

将``替换为所需的数组大小。

评论(7)

你可以使用Enumerable.Repeat()

100个项目的数组,初始化为0x20。

byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();
评论(4)

你可以使用一个集合初始化器

UserCode = new byte[]{0x20,0x20,0x20,0x20,0x20,0x20};

如果数值不完全相同,这比Repeat效果更好。

评论(2)