2017-02-13 13 views
3

Предположим, у меня есть следующие:Как преобразовать тип ref в эквивалент «non ref»?

var t = typeof(Foo).MakeByRefType(); 

есть какие-либо способы, чтобы преобразовать результат обратно в typeof(Foo)?

Честно говоря, единственный способ я нашел это:

var t = typeof(Foo).MakeByRefType(); 
string name = t.Name.Trim('&'); 
string asmQualified = t.AssemblyQualifiedName.Replace(t.Name, name); 
var v = Type.GetType(asmQualified); 

Другие методы, которые я пробовал, не похоже на работу:

  1. Существуют ли более эффективные способы сделать это?
  2. Если это единственный способ, существуют ли ситуации, в которых он может выйти из строя (возможно, с динамически генерируемыми сборками)?

ответ

3

Это то, что GetElementType() для. Несмотря на имя, он не просто работает, чтобы получить элемент типа массива, но также работает, чтобы получить тип, на который ссылается указатель или тип ссылки.

+0

Спасибо! На самом деле это было связано только с получением типов элементов, содержащихся в массивах. – Chaplin89