250 votes

Type.GetType ("namespace.abClassName") renvoie null

Type.GetType("namespace.a.b.ClassName") renvoie null
et j'ai dans les utilisations:
using namespace.a.b;

UPDATE: le type existe, il se trouve dans une bibliothèque de classes différente, et je dois l'obtenir par nom de chaîne

302voto

DrPizza Points 9355

Type.GetType("namespace.qualified.TypeName") ne fonctionne que lorsque le type est trouvé dans mscorlib.dll ou dans l'assembly en cours d'exécution.

Si aucune de ces choses n'est vraie, vous aurez besoin d'un nom qualifié d'assemblage .

183voto

Asaf Pala Points 281

Vous pouvez également obtenir le type sans nom qualifié d'assembly mais avec le nom dll également, par exemple:

Type myClassType = Type.GetType("TypeName,DllName");

J'ai eu la même situation et cela a fonctionné pour moi. J'avais besoin d'un objet de type "DataModel.QueueObject" et j'avais une référence à "DataModel", j'ai donc obtenu le type comme suit:

Type type = Type.GetType("DataModel.QueueObject,DataModel");

La deuxième chaîne après la virgule est le nom de référence (nom dll).

87voto

peyman Points 151

essayez d'utiliser cette méthode

  public static Type GetType(string typeName)
        {
            var type = Type.GetType(typeName);
            if (type != null) return type;
            foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
            {
                type = a.GetType(typeName);
                if (type != null)
                    return type;
            }
            return null ;
        }
 

28voto

LarryBud Points 101

Si l'assembly fait partie de la génération d'une application ASP.NET, vous pouvez utiliser la classe BuildManager:

 using System.Web.Compilation
...
BuildManager.GetType(typeName, false);
 

26voto

erikkallen Points 16601
Dictionary<string, Type> typeCache;
...
public static bool TryFindType(string typeName, out Type t) {
    lock (typeCache) {
        if (!typeCache.TryGetValue(typeName, out t)) {
            foreach (Assembly a in AppDomain.CurrentDomain.GetAssemblies()) {
                t = a.GetType(typeName);
                if (t != null)
                    break;
            }
            typeCache[typeName] = t; // perhaps null
        }
    }
    return t != null;
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X