C++で行われていた古いプロジェクトをC#に書き換える作業に追われています。
私の仕事は、オリジナルにできるだけ近い機能を持つようにプログラムを書き換えることです。
このプログラムを書いた以前の開発者は、ファイルを処理する際に、ファイルが記述されなければならないフォーマットに対応する大量のフィールドを含む構造体を作成していたので、その作業はすべて私のためにすでに行われています。
これらのフィールドはすべてバイト配列です。C++のコードでは、memset
を使って、この構造体全体をすべてのスペース文字(0x20
)に設定します。コードは1行です。簡単ですね。
これは非常に重要なことで、このファイルが最終的に送られるユーティリティーは、このフォーマットのファイルを期待しています。私は、この構造体をC#のクラスに変更しなければなりませんでしたが、これらのバイト配列のそれぞれを簡単に全スペース文字に初期化する方法が見つかりません。
結局、クラスのコンストラクタで次のようにすることにしました。
//Initialize all of the variables to spaces.
int index = 0;
foreach (byte b in UserCode)
{
UserCode[index] = 0x20;
index++;
}
これはうまくいくのですが,もっと簡単な方法があるはずです。コンストラクタで配列を UserCode = new byte[6]
に設定すると、バイト配列は自動的にデフォルトのnull値に初期化されます。クラスのコンストラクタを呼び出したときに、このようにすぐに初期化されるように、宣言時にすべてのスペースになるようにする方法はありませんか?あるいは、memset
のような関数を使うとか?
使えるのはEnumerable.Repeat()です。
0x20に初期化された100個のアイテムの配列。
byte[] arr1 = Enumerable.Repeat(0x20,100).ToArray();