Quiero crear una instancia de los tipos de valor como , System.String
System.Boolean
, System.Int32
, etc. consigo nombres calificados de tipos como System.String
oMyNamespace.Employee
y tengo que crear una instancia y regreso. Yo uso Activator.CreateInstance
y FormatterServices.GetUninitializedObject
para crear instancias. Pero falla en el caso de los tipos de valores. No puedo codificar la lógica en caso de tipos de valores. Necesito una forma genérica de crear instancias de ambos tipos de valores y tipos de referencia.Cómo crear una instancia de tipos de valores que utilizan la reflexión
Respuesta
¿Qué es exactamente lo que estás tratando de hacer? FormatterServices.GetUninitializedObject
se usa principalmente por código de serialización; fuera de eso, realmente no deberías usarlo. Se suena como que sólo podría necesitar algo así como TypeConverter
, es decir, (para este tipo)
TypeConverter tc = TypeDescriptor.GetConverter(someType);
object obj = tc.ConvertFromString(s);
Gracias ayudó. –
Oh, encantador para cosas genéricas :) – Nyerguds
¿Qué es exactamente está fallando? He probado el siguiente código para ver si hay un problema con los tipos de valor:
var instance = Activator.CreateInstance(typeof(Int32));
Me da una instancia Int32 puesto a 0.
exactamente dónde está fallando el código? De lo contrario, diría que el problema radica en la forma en que está cargando el tipo, no en la forma en que está creando la instancia.
Eish Jaco! Acabo de regresar para cambiar mi 'var' por 'int', en caso de que 'var' no fuera familiar para el OP, y sigues la misma línea de código que yo. :-) – ProfK
Jaja - tienes que ser rápido en el sorteo :-) –
Esto funciona para mí:
int x = (int)Activator.CreateInstance(typeof (Int32), true);
Por tipos de valor BCL (y cuando el uso de cadenas para describir tipos) asegurarse de que no está utilizando C# palabras clave y asegurar el tipo está plenamente cualificado con espacio de nombres. Por ejemplo, C# int se ha creado correctamente esta manera con Activator.CreateInstance (..)
object num = Activator.CreateInstance(Type.GetType("System.Int32"));
Usted recibirá intentos fallidos si intenta utilizar alias específicos del lenguaje como "int"
o cortas formas como "Int32"
.
- 1. ¿Cómo obtener todas las propiedades estáticas y sus valores de una clase que utilizan la reflexión
- 2. Cómo usar la reflexión para crear una "máquina de reflexión"
- 3. Encontrar métodos que tienen atributo personalizado que utilizan la reflexión
- 4. Java: crear instancias de una enumeración utilizando la reflexión
- 5. Creando una instancia de IList genérica usando la reflexión
- 6. Crear tipos que no admiten valores en C#
- 7. Reflexión y tipos genéricos
- 8. Crear una instancia de IDataAdapter de la instancia de IDbConnection
- 9. ¿Cómo crear una instancia de ArrayList <?> y agregar un elemento a través de la reflexión con Java?
- 10. cómo crear una instancia de un oyente por reflexión en Android
- 11. ¿Cómo crear una instancia de enum usando reflection en java?
- 12. Cómo hacer AutoMapper crear una instancia de la clase
- 13. ¿Cómo obtener los tipos de parámetros usando la reflexión?
- 14. Reflexión - Obtención de los parámetros genéricos de una instancia System.Type
- 15. ¿Cómo crear clases .NET de alto rendimiento utilizando la reflexión?
- 16. Crear delegado través de la reflexión
- 17. Cómo crear una instancia de org.springframework.dao.DataAccessException?
- 18. ¿Cómo establecer/crear una instancia de Generics?
- 19. Crear instancia de tipo genérico?
- 20. Cómo crear una java.util.ArrayList con clase genérica utilizando la reflexión
- 21. Descubriendo tipos derivados utilizando la reflexión
- 22. Cómo crear una instancia de PrivateType de clase privada interna
- 23. Cómo establecer valores de atributos utilizando la reflexión
- 24. ¿Cómo crear una instancia predeterminada después de crear una instancia con nombre?
- 25. ¿Crear nuevo objeto usando la reflexión?
- 26. Java Reflexión con los tipos primitivos
- 27. Crear instancia predeterminada de tipo
- 28. Necesita una mejor manera que la Reflexión
- 29. Cómo crear una instancia de la secuencia System.IO.Stream
- 30. Crear una instancia de JDialog de JPanel
System.String es un tipo de referencia, no un tipo de valor. –