Есть ли способ сделать это? Задайте поток байтов, чтобы преобразовать его в нужный тип.C# switch on variable type
(Предположим, что вызывающий код будет обрабатывать типы данных, относящиеся к числу байтов в потоке).
public void GetValue(byte[] bytes, ref UInt16 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt16(bytes, 0);
}
public void GetValue(byte[] bytes, ref UInt32 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt32(bytes, 0);
}
public void GetValue(byte[] bytes, ref UInt64 value)
{
if (BitConverter.IsLittleEndian)
Array.Reverse(bytes);
value = BitConverter.ToUInt64(bytes, 0);
}
etc...
Я полагаю, что есть лучший способ, путь включения типа значения, например, вместо того, повторены перегрузки.
Я бы * начал *, заставив методы вернуть значение и избавиться от параметра 'ref' ... затем называть методы' GetInt32' и т. Д. Используя параметр 'ref' просто поэтому вы можете перегрузить метод, который мне кажется ужасным. –
О, и вы можете посмотреть http://pobox.com/~skeet/csharp/miscutil, который включает в себя «EndianBitConverter» ... –