web-dev-qa-db-fra.com

Obtenir un système System.type du nom partiel de type

Je veux obtenir un System.Type donné uniquement le nom de type dans un string.

Par exemple, si j'ai un objet:

MyClass abc = new MyClass();

Je peux alors dire:

System.Type type = abc.GetType();

Mais si tout ce que j'ai est:

string className = "MyClass";
37
Mark T
Type type = Type.GetType("foo.bar.MyClass, foo.bar");

MSDN . Assurez-vous que le nom est Assembly qualifié .

33

Pour créer une instance de votre classe après avoir obtenu le type et invoquer une méthode -

Type type = Type.GetType("foo.bar.MyClass, foo.bar");
object instanceObject = System.Reflection.Activator.CreateInstance(type);
type.InvokeMember(method, BindingFlags.InvokeMethod, null, instanceObject, new object[0]);
2
Seibar
Type type = Type.GetType("MyClass");

Assurez-vous d'inclure l'espace de noms. Il existe des surcharges de la méthode qui contrôlent la sensibilité de cas et si une exception est lancée si le nom de type n'est pas trouvé.

1
jalbert

Une autre façon d'obtenir le type d'assemblage actuel ou autre.

(Suppose que l'espace de noms de classe contient son assemblage):


public static Type GetType(string fullName) { if (string.IsNullOrEmpty(fullName)) return null; Type type = Type.GetType(fullName); if (type == null) { string targetAssembly = fullName; while (type == null && targetAssembly.Length > 0) { try { int dotInd = targetAssembly.LastIndexOf('.'); targetAssembly = dotInd >= 0 ? targetAssembly.Substring(0, dotInd) : ""; if (targetAssembly.Length > 0) type = Type.GetType(fullName + ", " + targetAssembly); } catch { } } } return type; }
1
Zbigniew Wiadro

Voici une méthode simple pour créer et initialiser un nouvel objet à partir de son nom et des paramètres:

    //  Creates and initializes a new object from its name and parameters
    public Object CreateObjectByName(string name, params Object[] args)
    {
        string s = "<prefix>" + name;    // case sensitive; Type.FullName
        Type type = Type.GetType(s);
        Object o = System.Activator.CreateInstance(type, args);
        return o;
    }

Un exemple de la façon dont on peut utiliser pour lire un fichier contenant des noms de classe [ou des noms de classe partielle] et des paramètres, puis ajouter les objets renvoyés à une liste d'objets d'un type de base commun aux objets créés.

Pour voir ce que votre nom de classe [ou] devrait ressembler, utilisez temporairement quelque chose comme ceci [si votre classe est nommée NewClass]:

    string z = (new NewClass(args)).GetType().FullName;
0
shadow

Type.GetType(...) peut échouer parfois si l'opérateur typeof ne peut pas être utilisé.

Au lieu de cela, vous pouvez réfléchir aux assemblages du domaine actuel afin de le faire.

vérifiez ma réponse sur ce fil

0
dmihailescu