Как привести приведенное значение CreateInstance - PullRequest
2 голосов
/ 09 мая 2011

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

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

0 голосов
/ 09 мая 2011

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

bool t = (bool)o;

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

...