Me he encontrado con un comportamiento extraño en mi (enorme) proyecto .NET 4. En algún momento en el código, me refiero a un tipo completo, por ejemplo:¿Por qué System.Type.GetType ("Xyz") devuelve null si typeof (Xyz) existe?
System.Type type = typeof (Foo.Bar.Xyz);
más adelante, hago esto:
System.Type type = System.Type.GetType ("Foo.Bar.Xyz");
y regrese null
. No puedo entender por qué sucede esto, porque mi nombre de tipo es correcto y lo he comprobado con otros tipos y se resuelven correctamente. Por otra parte, la siguiente consulta LINQ encuentra el tipo:
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
System.Type type = types.FirstOrDefault();
¿Hay alguna razón por la System.Type.GetType
podría fallar?
finalmente he tenido que recurrir a este pedazo de código en lugar de GetType
:
System.Type MyGetType(string typeName)
{
System.Type type = System.Type.GetType (typeName);
if (type == null)
{
var types = from assembly in System.AppDomain.CurrentDomain.GetAssemblies()
from assemblyType in assembly.GetTypes()
where assemblyType.FullName == typeName
select assemblyType;
type = types.FirstOrDefault();
}
return type;
}
Muchas gracias por su respuesta. De hecho, todos los demás tipos que estaba resolviendo hasta ahora estaban ubicados en el mismo ensamblado o en mscorlib, por lo que no detecté el error antes. –
Proporcionar 'System.Type.GetType' con información de ensamblaje parcial funciona incluso si el ensamblado tiene un nombre fuerte. He comprobado 'System.Type.GetType (" Foo.Bar.Baz, MyCompany.MyAssembly ")' y funciona incluso si 'MyCompany.Assembly' tiene un nombre seguro. –
para futuras referencias, si desea usar el backtick en un código resaltado (y USTED probablemente lo hará;), use doble backticks para comenzar y cerrar la cita :). Ver [aquí] (http://meta.stackexchange.com/q/82718/237379). – Noctis