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

C#:创建一个数组,然后批量分配变量,c#,arrays,C#,Arrays,有可能做像这样的事情吗 byte[] byteArray = new byte[100] byteArray = {0x00, 0x01, 0x02, 0x03, ... , 0x10} 然后稍后再设置其余变量? 我宁愿避免使用: byteArray[0] = 0x00; byteArray[1] = 0x01; 等等 对不起,我应该说得更清楚一点,我想一次设置一半的值,然后再填充其余的值。我将列出一个列表是的,您可以使用数组初始化语法 byte[] byte

有可能做像这样的事情吗

    byte[] byteArray = new byte[100]
    byteArray = {0x00, 0x01, 0x02, 0x03, ... , 0x10}
然后稍后再设置其余变量?
我宁愿避免使用:

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


对不起,我应该说得更清楚一点,我想一次设置一半的值,然后再填充其余的值。我将列出一个列表

是的,您可以使用数组初始化语法

byte[] byteArray = new byte[] { 0x00, 0x01, 0x02, 0x03, ... , 0x10};

如果您的意思是,您可以创建一个包含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 List<int> { 1, 2, 3, 4, 5 };
i.Add(6); // etc

有很多备选方案,但由于不太了解这些值的来源,我很犹豫是否继续列出它们。

以编程方式键入所有100个条目将是最有效的。如果要避免将它们全部输入,可以在循环中执行:

byte[] byteArray = new byte[100];   
byte currentByte = 0x00;
for (int i = 0; i < byteArray.Length; i++)
    byteArray[i] = currentByte++;
byte[]byteArray=新字节[100];
字节currentByte=0x00;
for(int i=0;i
除非您要创建一个可变大小或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("};");
byte[]byteArray=新字节[256];
字节currentByte=0x00;
for(int i=0;i
然后,您可以将控制台结果复制/粘贴到您的C代码文件中


编辑:我觉得自己像个傻瓜。当然,对于长度大于256的情况,这是完全不必要的,也是危险的,因为
currentByte
将回滚到0,因为它是一个字节。

如果您知道首先要初始化多少项,可以创建字典初始值设定项。例如:

Dictionary<int,byte> initializer = new Dictionary<int,byte> { {0, 0x01}, {3, 0x04}, {7, 0xFF} .. };

我想你要找的是一些可变的东西,所以我推荐如下

List<byte> byteArray = new List<byte>() { initialize what you want here };
...
...
byteArray[*n*] = *value*
...
...
byteArray.Add(*value*);

返回
byte[*length of list*]

您的意思是,是否可以在不键入100行的情况下设置所有100个条目(或将100个条目作为初始化语法)全部设置?你指的是值,不是变量……顺便说一句,答案也适用于列表,在我能想到的几乎所有情况下,它都比数组更可取。@Amiciable你能从
[]I=
开始吗?啊,我明白了,实际上不需要字典,
初始值设定项
可以是另一个
字节[]
。当然,这一点很好。我指的是OP的原始示例,必须承认我没有直接关注您使用的值。我还指的是原始示例,它初始化了键0、1、2、3,然后初始化了省略,然后初始化了未知索引的一些值,所以我假设索引不是连续的。你们为什么回答没有真正阅读问题?
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];
List<byte> byteArray = new List<byte>() { initialize what you want here };
...
...
byteArray[*n*] = *value*
...
...
byteArray.Add(*value*);
byteArray.ToArray();