是否可以执行类似
的操作 byte[] byteArray = new byte[100]
byteArray = {0x00, 0x01, 0x02, 0x03, ... , 0x10}
然后设置其余的变量?
我宁愿避免使用:
byteArray[0] = 0x00;
byteArray[1] = 0x01;
等等
对不起,我应该更明确地说我想一次设置一半的值,然后再填写其余部分。我会带一份清单
答案 0 :(得分:4)
如果你的意思是你可以创建一个包含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();
有很多替代品,但不知道这些价值来自何处,我对于继续列出它们犹豫不决。
答案 1 :(得分:2)
是的,您可以使用数组初始化语法。
byte[] byteArray = new byte[] { 0x00, 0x01, 0x02, 0x03, ... , 0x10};
答案 2 :(得分:1)
虽然以编程方式输入所有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,因为它是字节。
答案 3 :(得分:1)
我认为你所寻找的东西是可变的,所以我推荐以下内容。
List<byte> byteArray = new List<byte>() { initialize what you want here };
...
...
byteArray[*n*] = *value*
...
...
byteArray.Add(*value*);
这更灵活。使用可以随时添加的字节列表,只要索引存在,就可以使用索引器进行设置。此外,您可以使用以下代码行将该列表设为数组。
byteArray.ToArray();
返回byte[*length of list*]
答案 4 :(得分:0)
如果您知道首先要初始化的项目数,则可以创建一个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];