5

のようなことをすることは可能ですか

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

後で残りの変数を設定しますか?
私はむしろ使用を避けたい:

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

等々

申し訳ありませんが、一度に半分の値を設定し、残りを後で入力することを明確にする必要がありました。私はリストで行きます

4

5 に答える 5

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();

選択肢はたくさんありますが、これらの値がどこから来ているのかよくわからないので、私はそれらをリストし続けることを躊躇しています。

于 2012-07-25T12:14:22.703 に答える
2

はい、配列初期化構文を使用できます。

byte[] byteArray = new byte[] { 0x00, 0x01, 0x02, 0x03, ... , 0x10};
于 2012-07-25T12:10:18.500 に答える
1

あなたが探しているのは変更可能なものだと思うので、次のことをお勧めします。

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

これははるかに柔軟です。バイトのリストを使用すると、インデックスが存在する限り、いつでも追加してインデクサーを使用して設定できます。さらに、次のコード行を使用して、そのリストを配列にすることができます。

byteArray.ToArray();

それは戻りますbyte[*length of list*]

于 2012-07-25T12:23:25.103 に答える
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を超える長さの場合は、バイトであるため0にロールオーバーするだけなので危険です。currentByte

于 2012-07-25T12:15:40.757 に答える
0

最初に初期化するアイテムの数がわかっている場合は、ディクショナリ初期化子を作成できます。例:

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];
于 2012-07-25T12:21:34.607 に答える