2
私のプログラムでは、NetworkStream
以上のバッファを準備するPacketFactory
が用意されています。以下に見られるように、このメソッドはパラメータとして短い値をとります。この短絡はBitConverter.GetBytes
に渡されます。自分自身の方法でBitConverter.GetBytesに存在するすべてのオーバーロードを簡単に使用する
internal static class PacketFactory
{
internal static byte[] ToBuffer(PacketType type, short value)
{
byte[] packet = PacketTypeFactory.ToBuffer(type);
byte[] valueBytes = BitConverter.GetBytes(value);
byte[] buffer = new byte[packet.Length + valueBytes.Length];
Array.Copy(packet, 0, buffer, 0, packet.Length);
Array.Copy(valueBytes, 0, buffer, packet.Length, valueBytes.Length);
return buffer;
}
}
今私の問題:BitConverter.GetBytes
は10のオーバーロードがあります。 ToBuffer
メソッドのvalue
パラメータで、このオーバーロードをすべて簡単に使用したいと思います。
ナイーブソリューション:もBitConverter.GetBytes
上に存在するすべてのオーバーロードを作成し、内部メソッドにすべてを渡します。これを解決するより良い方法はありますか?
私はAPIを使いにくくすると言いたいと思います。私は、毎回BitConverter.GetBytesを渡すためにapiのユーザーを強制するよりも、10個のオーバーロードを作成する方が良いでしょう。 – Evk
Thx。これは正常に動作しますが、私は常に 'BitConverter.GetBytes'を渡す必要があります。 Funcを最後に移動してBitConverter.GetBytesをデフォルト値として使用することはできますが、デフォルトのパラメータはコンパイル時の定数でなければならないため動作しません。 –
これは私が考えることができる最もエレガントなソリューションです。コンパイラは 'BitConverter.GetBytes'のオーバーロードを知っていなければならないので、値のスコープ内で使用する必要があります。 –