是否可以做类似的事情
byte[] byteArray = new byte[100]
byteArray = {0x00, 0x01, 0x02, 0x03, ... , 0x10}
然后设置其余的变量?
我宁愿避免使用:
byteArray[0] = 0x00;
byteArray[1] = 0x01;
等等
抱歉,我应该更清楚地说明我想一次设置一半的值,然后再填写其余的值。我会带着一份清单去
如果您的意思是您可以创建一个包含 100 个项目的数组并将其中的 5 个设置为内联,例如:
int[] i = new int[100] { 1, 2, 3, 4, 5 };
然后不,你会得到一个编译器错误:
需要一个长度为“100”的数组初始值设定项。
但是,您可以对所有项目进行内联初始化:
int[] i = new int[] { 1, 2, 3, 4, 5 };
或者更简洁(编译器可以将其推断为int[]
):
var i = new[] { 1, 2, 3, 4, 5 };
一个中途的房子是使用一个列表,它可以在以后增长:
var i = new List<int> { 1, 2, 3, 4, 5 };
i.Add(6); // etc
然后您可以根据需要将其更改为数组:
var iArray = i.ToArray();
有很多替代品,但由于不知道这些值的来源,我很犹豫是否继续列出它们。
是的,您可以使用数组初始化语法。
byte[] byteArray = new byte[] { 0x00, 0x01, 0x02, 0x03, ... , 0x10};
我认为您正在寻找的东西是可变的,所以我会推荐以下内容。
List<byte> byteArray = new List<byte>() { initialize what you want here };
...
...
byteArray[*n*] = *value*
...
...
byteArray.Add(*value*);
这要灵活得多。有了字节列表,只要索引存在,您就可以随时添加并使用索引器进行设置。此外,您可以使用以下代码行将该列表设为数组。
byteArray.ToArray();
那返回byte[*length of list*]
以编程方式输入所有 100 个条目时,性能最高。如果您想避免全部输入,可以循环执行:
byte[] byteArray = new byte[100];
byte currentByte = 0x00;
for (int i = 0; i < byteArray.Length; i++)
byteArray[i] = currentByte++;
除非您有可变大小或 256 字节的条目,否则我建议通过将其放在数组初始化语法中来执行其他人在上面发布的内容。如果您确实有很多条目,您可以编写一个快速脚本来生成C# 初始化代码:
byte[] byteArray = new byte[256];
byte currentByte = 0x00;
for (int i = 0; i < byteArray.Length; i++)
byteArray[i] = currentByte++;
Console.Write(String.Format("byte[] byteArray = new byte[{0}] {{", byteArray.Length));
Console.Write(String.Join(", ", byteArray));
Console.Write("};");
然后,您可以将该控制台结果复制/粘贴到您的 C# 代码文件中。
编辑:我觉得自己像个傻瓜。当然,对于大于 256 的长度,这完全是不必要和危险currentByte
的,因为它只是回滚到 0,因为它是一个byte。
如果您首先知道要初始化多少项,则可以创建一个 Dictionary 初始化程序。例子:
Dictionary<int,byte> initializer = new Dictionary<int,byte> { {0, 0x01}, {3, 0x04}, {7, 0xFF} .. };
然后用简单的循环预初始化你的空数组:
byte[] byteArray = new byte[100];
foreach (int key in initializer.Keys)
byteArray[key] = initializer[key];