• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

204
Vistas
Tipo T = Tipo.GetType(TypeName); T está devolviendo nulo

Es un programa simple en el que estoy pasando System.Console y me devolverá los Métodos que tiene usando Reflection... Aquí el objeto Type T toma Null incluso después de que estoy pasando System.Console en txtTypeName.Text

Mi código :

 string TypeName = txtTypeName.Text; Type T = Type.GetType(TypeName,true); MethodInfo[] methods = T.GetMethods(); foreach (MethodInfo method in methods) { lstMethod.Items.Add(method.Name); }

Type T = Type.GetType(TypeName); T está devolviendo nulo

over 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

El comportamiento de Type.GetType() ha cambiado para .net Core y versiones posteriores*.

Este código funciona con .net 4.8:

 Type? t = Type.GetType("System.Console", true); Console.WriteLine(t!.FullName);

¡Pero falla en .net Core y versiones posteriores!

Reproducción que muestra que no funciona en .net 6.0: https://dotnetfiddle.net/JlAhqn

Reproducción que lo muestra funcionando en .net 4.7.2: https://dotnetfiddle.net/ahV7fC

Para que esto funcione en .net Core o posterior, debe especificar el nombre calificado de ensamblado del tipo, que incluye el nombre del ensamblado desde el que se cargó este objeto de tipo.

Para el tipo System.Console , el nombre del ensamblado también es "System.Console", por lo que lo siguiente funciona en .net Core y .net Framework:

 Type? t = Type.GetType("System.Console, System.Console", true); Console.WriteLine(t!.FullName);

Reproducción que lo muestra funcionando en .net 6.0: https://dotnetfiddle.net/dA1ulx


* Como se señaló en la otra respuesta, el comportamiento ha cambiado para "System.Console" porque se movió a otro ensamblaje.

Ha habido algunos otros cambios en el área que pueden afectar a Type.GetType() , específicamente debido a cambios en Assembly.LoadFrom() pero esos cambios no causan este efecto.

Vea aquí para más detalles: https://github.com/dotnet/runtime/issues/12376

over 3 years ago · Santiago Trujillo Denunciar

0

La respuesta aceptada no es del todo correcta.

El comportamiento de Type.GetType no cambió entre las versiones del marco. La documentación en ambos estados (en negrita) :

Parámetros

typeName String

El nombre completo del ensamblado del tipo que se va a obtener. Consulte AssemblyQualifiedName . Si el tipo está en el ensamblado que se está ejecutando actualmente o en mscorlib.dll/System.Private.CoreLib.dll , basta con proporcionar el nombre de tipo calificado por su espacio de nombres.

Solo los tipos que están en el ensamblado llamante o en el ensamblado BCL no necesitan calificación. La diferencia entre las dos versiones del marco es simplemente que System.Console se movió a un ensamblaje diferente, por eso está fallando. Los documentos para .NET 6 muestran System.Console.dll , mientras que NET 4.7 muestra mscorlib.dll

Puede, por ejemplo, ver en estos dos violines lo que sucede si prueba System.DateTime sin calificación: funciona en ambos casos.
.NET 4.7
.NET 6

over 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda