algunos tipos simples como int, cadena, .... son fáciles de entender que son ValueTypes o RefrenceTypes. Pero quiero saber si hay alguna forma de distinguirlo.¿Cómo distinguir que un tipo es ValueType O RefereceType?
Respuesta
Todas las estructuras, enumeraciones y tipos nativos son tipos de valor.
En tiempo de ejecución se puede comprobar de esta manera:
Type type = typeof(TypeName);
if (type.IsValueType)
{
//...
}
Solo en el mundo .net. –
Muy buen punto :-) –
Las cadenas no son tipos de valores.
Aquí está una lista de los más comúnmente utilizados value types:
- bool (System.Boolean)
- byte (System.Byte)
- char (System.Char)
- decimal (System.Decimal)
- doble (System.Double)
- flotador (System.Single)
- int (System.Int32)
- largo (System.Int64)
- sbyte (System.SByte)
- corto (System.Int16)
- uint (System.UInt32)
- ulong (Sistema. UInt64)
- ushort (System.UInt16)
- System.DateTime
Además de los:
- Cualquier tipo que es una enumeración
- Cualquier tipo que es un struct
Todos los otros tipos son los tipos de referencia.
Leyendo su comentario, DateTime es un tipo de valor. Así que, ¿qué significa? DateTime dt = new DateTime Gracias – odiseh
Creo que confunde tipos de valor/referencia con si ciertos tipos tienen literales o no. Las cadenas tienen literales de cadena que se pueden usar para inicializarlos, pero no son tipos de valores. DateTime no tiene ningún literal, pero es un tipo de valor. Lo que eso significa es que cuando pasa un DateTime como parámetro a una función, o escribe DateTime datetime1 = datetime2, el valor se copia realmente en lugar de ambos datetime refiriéndose al mismo objeto. –
Lo que Tal dijo es totalmente correcto. La elección de lo que obtiene o no los literales depende totalmente del idioma. Lo que es y lo que no es un tipo de valor lo define la propia CLI. Por ejemplo, VB tiene literales DateTime. Uno también puede tener listas o hash literales (boo, IronPython, IronRuby), y esos todavía son tipos de referencia. –
- 1. Usando .Net, ¿cómo puedo determinar si un tipo es un ValueType numérico?
- 2. ¿Cómo puedo determinar si System.Type es un tipo personalizado o un tipo de Framework?
- 3. cómo detectar si un tipo es un iterador o const_iterator
- 4. RAISERROR-¿Cómo distinguir con SqlException?
- 5. ¿Qué es intptr_t, es un tipo para entero o puntero?
- 6. Outlook MailItem: ¿Cómo distinguir si el correo es entrante o saliente?
- 7. Cómo obtener NHibernate.Type.IType de un Tipo?
- 8. Cómo saber si un Tipo es una lista o matriz o IEnumerable o
- 9. ¿Cómo determinar si un tipo es un tipo de colección?
- 10. ¿Cómo se puede distinguir si un objeto contextual dado es una actividad o un contexto de servicio?
- 11. Cómo declarar una restricción genérica que es un tipo genérico
- 12. ¿Por qué System.Enum no es un tipo de valor?
- 13. Distinguir instrumentos en un archivo de música
- 14. Cómo distinguir entre una secuencia y un mapeo
- 15. Dónde saber/comprobar: Int32 hereda de ValueType, ValueType hereda de Object?
- 16. ¿Mi tipo genérico es una lista o solo un artículo?
- 17. ¿Cómo distinguir un marco de una biblioteca de funciones?
- 18. ¿Modificar ValueType desde el método de extensión? Hace
- 19. C++: type_info para distinguir tipos
- 20. Cómo comprobar que el tipo actual (objeto de Tipo) tiene interfaz necesaria (o tipo principal)
- 21. ¿Cómo se puede distinguir si se trata de un servicio web SOAP o REST?
- 22. ¿Es posible probar un objeto contra un tipo de componente y/o tipo heredado?
- 23. ¿Es una matriz un tipo primitivo o un objeto (o algo completamente diferente)?
- 24. Verifique si un objeto dado (referencia o tipo de valor) es igual a su valor predeterminado
- 25. Distinguir una tubería de un archivo en Unix
- 26. ¿Cómo distinguir el evento de descarga desencadenado por la actualización o la ventana cerrada?
- 27. ¿Cuál es la diferencia entre un tipo de opción y un tipo que admite nulos?
- 28. ¿Cómo determinar y verificar si un tipo en el ensamblaje es tipo personalizado o tipo primitivo usando reflexión en .NET?
- 29. ¿Cómo puedo distinguir entre gráficos y fotografías?
- 30. ¿Cómo saber si un IEnumerable <ValueType> está vacío, sin contar todo?
Eso depende por completo de su idioma/tiempo de ejecución. –
Bien notado. Supongo que esta es una pregunta de .NET/C#. ¿Estoy en lo cierto? –
@ Martinho: exactamente tienes razón. – odiseh