Если вы сможете найти способ сделать это, как именно вы намереваетесь использовать eventObject
после того, как вам удалось его создать? Его тип неизвестен во время компиляции, поэтому вы не можете написать код, который использует его методы и свойства, потому что вы не знаете, какие методы и свойства у него есть.
Например, если у вас есть тип "foo" с методом DoFoo()
и тип "bar" с методом DoBar()
, как узнать, вызывать ли DoFoo()
или DoBar()
?
var eventType = Type.GetType("foo");
var eventObject = obj.ToObject<eventType>();
eventObject.DoFoo(); //How do you know to do this?
eventObject.DoBar(); //How do you know to do this?
Лучшее, что вы можете сделать, - это серия операторов if:
if (eventType) == typeof(foo))
{
eventObject.DoFoo();
}
if (eventType) == typeof(bar))
{
eventObject.DoBar();
}
Что ж, если вы собираетесь это сделать, вы также можете разыграть его вТо же, если блок, который устраняет вашу проблему.
if (obj.GetType() == typeof(foo))
{
((foo)obj).DoFoo();
}
if (obj.GetType() == typeof(bar))
{
((bar)obj).DoBar();
}
Если вам на самом деле не нужны какие-либо из его свойств или методов, и вам нужно только иметь возможность передать его в какой-то универсальный метод, вы можете просто передатьэто вместе как объект. Получить метод немного сложнее:
mediatR.GetType()
.GetMethod("Publish");
.MakeGenericMethod(eventType);
.Invoke(obj, null);