using System;
using System.Collections.Generic;
using System.Linq;
namespace Test
{
class Program
{
class MyClass1 { }
class MyClass2 { }
delegate void DeserializeDelegate(byte[] data);
static void Deserialize<T>(byte[] data)
{
// デシリアライズ処理
Console.WriteLine($"Deserialize<{typeof(T)}> is called");
}
static void Main(string[] args)
{
var data = new byte[] { 1, 2, 3 };
var delegates = new Dictionary<int, DeserializeDelegate>
{
[1] = new DeserializeDelegate(Deserialize<MyClass1>),
[2] = new DeserializeDelegate(Deserialize<MyClass2>),
};
// data の1バイト目で、
// どのクラスとしてデシリアライズするかを別ける
var deserialize = delegates[data[0]];
// data の1バイト目を飛ばす
data = data.Skip(1).ToArray();
deserialize(data);
}
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgVGVzdAp7CiAgICBjbGFzcyBQcm9ncmFtCiAgICB7CiAgICAgICAgY2xhc3MgTXlDbGFzczEgeyB9CiAgICAgICAgY2xhc3MgTXlDbGFzczIgeyB9CgogICAgICAgIGRlbGVnYXRlIHZvaWQgRGVzZXJpYWxpemVEZWxlZ2F0ZShieXRlW10gZGF0YSk7CgogICAgICAgIHN0YXRpYyB2b2lkIERlc2VyaWFsaXplPFQ+KGJ5dGVbXSBkYXRhKQogICAgICAgIHsKICAgICAgICAgICAgLy8g44OH44K344Oq44Ki44Op44Kk44K65Yem55CGCiAgICAgICAgICAgIENvbnNvbGUuV3JpdGVMaW5lKCQiRGVzZXJpYWxpemU8e3R5cGVvZihUKX0+IGlzIGNhbGxlZCIpOwogICAgICAgIH0KCiAgICAgICAgc3RhdGljIHZvaWQgTWFpbihzdHJpbmdbXSBhcmdzKQogICAgICAgIHsKICAgICAgICAgICAgdmFyIGRhdGEgPSBuZXcgYnl0ZVtdIHsgMSwgMiwgMyB9OwoKICAgICAgICAgICAgdmFyIGRlbGVnYXRlcyA9IG5ldyBEaWN0aW9uYXJ5PGludCwgRGVzZXJpYWxpemVEZWxlZ2F0ZT4KICAgICAgICAgICAgewogICAgICAgICAgICAgICAgWzFdID0gbmV3IERlc2VyaWFsaXplRGVsZWdhdGUoRGVzZXJpYWxpemU8TXlDbGFzczE+KSwKICAgICAgICAgICAgICAgIFsyXSA9IG5ldyBEZXNlcmlhbGl6ZURlbGVnYXRlKERlc2VyaWFsaXplPE15Q2xhc3MyPiksCiAgICAgICAgICAgIH07CgogICAgICAgICAgICAvLyBkYXRhIOOBrjHjg5DjgqTjg4jnm67jgafjgIEKICAgICAgICAgICAgLy8g44Gp44Gu44Kv44Op44K544Go44GX44Gm44OH44K344Oq44Ki44Op44Kk44K644GZ44KL44GL44KS5Yil44GR44KLCiAgICAgICAgICAgIHZhciBkZXNlcmlhbGl6ZSA9IGRlbGVnYXRlc1tkYXRhWzBdXTsKICAgICAgICAgICAgLy8gZGF0YSDjga4x44OQ44Kk44OI55uu44KS6aOb44Gw44GZCiAgICAgICAgICAgIGRhdGEgPSBkYXRhLlNraXAoMSkuVG9BcnJheSgpOwoKICAgICAgICAgICAgZGVzZXJpYWxpemUoZGF0YSk7CiAgICAgICAgfQogICAgfQp9Cg==