Pergunta

Qual é a melhor maneira de converter uma string em um objeto Type em .NET?

As questões a considerar:

  • O tipo pode estar em uma montagem diferente.
  • O tipo é de montagem não pode ser carregado ainda.

Esta é minha tentativa, mas não aborda a segunda edição

Public Function FindType(ByVal name As String) As Type
    Dim base As Type

    base = Reflection.Assembly.GetEntryAssembly.GetType(name, False, True)
    If base IsNot Nothing Then Return base

    base = Reflection.Assembly.GetExecutingAssembly.GetType(name, False, True)
    If base IsNot Nothing Then Return base

    For Each assembly As Reflection.Assembly In _
      AppDomain.CurrentDomain.GetAssemblies
        base = assembly.GetType(name, False, True)
        If base IsNot Nothing Then Return base
    Next
    Return Nothing
End Function
Foi útil?

Solução

que você pode precisar chamar GetReferencedAssemblies () para o segundo.

namespace reflectme
{
    using System;
    public class hello
    {
        public hello()
        {
            Console.WriteLine("hello");
            Console.ReadLine();
        }
        static void Main(string[] args)
        {
            Type t = System.Reflection.Assembly.GetExecutingAssembly().GetType("reflectme.hello");
            t.GetConstructor(System.Type.EmptyTypes).Invoke(null);
        }
    }
}

Outras dicas

Você pode usar Type.GetType (string) , a fim de faça isso. O nome do tipo de montagem tem de ser qualificado, mas o método irá carregar o conjunto, se necessário. A qualificação de montagem não é necessário se o tipo está em mscorlid ou a montagem que executa a chamada GetType.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top