私のコードは次のようになります
mem.WriteByte(4);
mem.WriteByte(1);
mem.Write(HostPortBuf, 0, 2);
//more
のように書けるでしょうか。
mem.MyWrite(4, 1, HostPortBuf, //more);
Mem は現在メモリストリームですが、配列を一度に簡単に構築できるので、ストリームである必要はありません。このようなことはありますか?C#で?
実際に読みやすいかどうかはわかりませんが、次のようになります。
public static class MemoryStreamExtensions
{
public static void Write(this MemoryStream stream, params object[] parameters)
{
if (stream != null)
{
foreach (var obj in parameters)
{
if (obj is byte)
{
stream.WriteByte((byte)obj);
}
else if (obj is byte[])
{
var theArray = (byte[])obj;
stream.Write(theArray, 0, theArray.Length);
}
}
}
}
}
internal class Program
{
private static void Main(string[] args)
{
MemoryStream zz = new MemoryStream();
zz.Write((byte)1, (byte)4, new byte[] { 5, 6 });
Console.ReadKey();
}
}
1と4をとしてキャストすることを忘れないでくださいbyte
。そうしないと、1と4のタイプがint
(これらの数値のデフォルトのタイプ)になるため、ストリームに最初の2バイトが追加されません。
現在のコードの方が読みやすいと思います。
それでも、これはおそらくあなたが探しているものです:
byte[] data = new byte[SIZE];
data[0] = 4;
data[1] = 1;
Array.Copy(HostPortBuf, 0, data, 2, HostPortBuf.Length);
mem.Write(data, 0, data.Length);