У меня есть такой код:
// lookup the object type, instance passing the data as constructor
//all registered types must implement ctor passed ReadOnlySpan<byte>
public static object InterpretPayload(ReadOnlySpan<byte> bytes)
{
var key = bytes[0];
if (!TypeLookup.ContainsKey(key))
return null;
Type type = TypeLookup[key];
var created = Activator.CreateInstance(type, bytes);
return created;
}
TypeLookup
отображает числа c в типы классов в странной манере фабричного метода. Однако, когда я изменяю свою кодовую базу на использование ReadOnlySpan
вместо byte[]
, теперь я получаю ошибку компилятора, что bytes
не является объектом, а это не так.
Есть ли другой способ сделать это? Я считаю, что Activator
пытается найти лучший ctor, основываясь на том, что я передаю, кажется, мне нужно сделать это более явно. Могу ли я использовать отражение другим способом или я нашел отражение в регистре не может эмулировать вызов ctor напрямую?