我正忙着将用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]在构造函数中将数组设置为时,字节数组会自动初始化为默认的null值。没有办法让它在声明时变成所有空格,以便当我调用类的构造函数时立即像这样初始化它吗?还是一些memset类似的功能?
对于小型数组,请使用数组初始化语法:
var sevenItems = new byte[] { 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20 }; 对于更大的阵列,请使用标准for循环。这是最易读,最有效的方法:
var sevenThousandItems = new byte[7000]; for (int i = 0; i < sevenThousandItems.Length; i++) { sevenThousandItems[i] = 0x20; } 当然,如果您需要大量执行此操作,则可以创建一个辅助方法来使代码简洁:
byte[] sevenItems = CreateSpecialByteArray(7); byte[] sevenThousandItems = CreateSpecialByteArray(7000);
// ...
public static byte[] CreateSpecialByteArray(int length) { var arr = new byte[length]; for (int i = 0; i < arr.Length; i++) { arr[i] = 0x20; } return arr; }
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。