Как привести приведенное значение CreateInstance

Как можно привести возвращаемое значение из CreateInstance, когда тип неизвестен?

Например, в этом коде:

MethodInfo mInfo = typeof(MyType).GetMethod(MethodBase.GetCurrentMethod().Name);
Object o = Activator.CreateInstance(mInfo.ReturnType);

Как я могу привести мой o к тому, что содержит mInfo.ReturnType?

2 ответа

Решение

Приведение (по крайней мере, как вы обычно подразумеваете) - это операция времени компиляции / статического типа. Единственный способ, который имеет смысл даже во время выполнения с неизвестным типом, - это иметь дело с универсальными типами (приведение к некоторому T - и обратите внимание, что вы можете выбрать T во время выполнения через MakeGenericMethod или же MakeGenericType), или с метапрограммированием (испуская IL, чтобы сделать соответствующее приведение). Во всех других случаях, когда тип неизвестен до времени выполнения, вы застряли с object или же dynamic,

Обычно вы не можете сделать это в обычной манере, кроме ситуаций mInfo.ReturnType содержит определение типа, который виден в текущем контексте во время компиляции. Например, если mInfo.ReturnType иметь bool определение вы можете просто сделать:

bool t = (bool)o;

Но в этом случае нет смысла использовать Активатор. Класс Activator используется, когда вы пытаетесь использовать тип, который был загружен из другой сборки, другими словами, этот тип не виден во время компиляции.
Так что ответ у вас нет возможности сделать это.

Другие вопросы по тегам