C#:创建一个数组,然后批量分配变量

时间:2012-07-25 12:08:37

标签: c# arrays

是否可以执行类似

的操作
    byte[] byteArray = new byte[100]
    byteArray = {0x00, 0x01, 0x02, 0x03, ... , 0x10}

然后设置其余的变量?
我宁愿避免使用:

    byteArray[0] = 0x00;
    byteArray[1] = 0x01;

等等

对不起,我应该更明确地说我想一次设置一半的值,然后再填写其余部分。我会带一份清单

5 个答案:

答案 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];