Я пытаюсь разобрать массивы байтов в несколько структур.
У меня есть пакет UDP с StructureTypeID
и StructureByteArray
внутри.
Также у меня есть структуры:
//StructureTypeID == 1
public struct Dog{}
//StructureTypeID == 2
public struct Cat{}
//StructureTypeID == 3
public struct Rat{}
У меня есть простой метод generi c:
public static T ByteArrayToStruct<T>(byte[] ByteArray){}
Я пробовал что-то вроде этого:
Dictionary<int, Type> StructTypes = new Dictionary<int, Type>(3)
{
{1, Dog},
{2, Cat},
{3, Rat},
};
StructTypes[StructureTypeID] ParsedStructure = ByteArrayToStruct<StructTypes[StructureTypeID]>(StructureByteArray);
или
Dictionary<int, string> StructTypes = new Dictionary<int, string>(3)
{
{1, "Dog"},
{2, "Cat"},
{3, "Rat"},
};
Type StructType = Type.GetType(StructTypes[StructureTypeID]);
StructType ParsedStructure = ByteArrayToStruct<StructType>(StructureByteArray);
Я также попытался сохранить метод generi c в словаре, но мне не удалось определить тип Fun c:
Dictionary<int, Func<byte[], SomethingHere>> ByteArrayParsers = new Dictionary<int, Func<byte[], SomethingHere>>(3)
{
{1, ByteArrayToStruct<Dog>},
{2, ByteArrayToStruct<Cat>},
{3, ByteArrayToStruct<Rat>},
};
var ParsedStructure = ByteArrayParsers[StructureTypeID](StructureByteArray);
Ни один из них не работает.
Я могу использовать простые if .. else
из Конечно, но я подумал, что, может быть, есть способ сделать это более элегантным способом.